2017-04-21 3 views
1

Microsoft Visual Studio를 사용하고 있으며 List 클래스의 제네릭 클래스를 만들었습니다. 기본 생성자에는 문제가 없지만 다른 두 (오버로드 된) 생성자가 오류를 생성하고 있습니다.C2244 템플릿 생성자 오버로드 오류

//List_Array.h 

template<typename T> 
class List_Array { 
private: 
    int size; ... 
    T* data; 
public: 
    List_Array<T>::List_Array(); 
    List_Array<T>::List_Array(int); 
    List_Array<T>::List_Array(const T&, int); 
    ... 
}; 

template<typename T> 
List_Array<T>::List_Array() { } 

template<typename T> 
List_Array<T>::List_Array(int s) { 
    this->size = s 
    this->data = new T[s]; 
} 

template<typename T> 
List_Array<T>::List_Array(const T& init, int s){ 
    this->size = s; 
    this->data = new T[s]; 
    for (int i = 0; i < s; i++){ 
      this->data[i] = init; 
    } 
} 

은 내가 C2244 'List_Array :: List_Array'를 얻을 : 기존의 선언

어떤 도움에 함수 정의와 일치 할 수없는이 많이 감사합니다!

답변

0

문제는 템플릿 또는 오버로드와 관련이 없습니다. 클래스 정의 내에서 멤버 함수 선언을 위해 List_Array<T>:: 부분 만 필요하지 않습니다. 즉

template<typename T> 
class List_Array { 
private: 
    int size; ... 
    T* data; 
public: 
    List_Array(); 
    List_Array(int); 
    List_Array(const T&, int); 
    ... 
}; 

LIVE

+0

당신을 감사합니다! 그게 문제를 일으킨다는 것을 몰랐습니다. –

+0

@TylerHughes 비 템플릿 클래스에서도 마찬가지입니다. 따라서 문제는 여기서 템플릿과 오버로드와 관련이 없습니다. – songyuanyao