2017-04-21 41 views
1

我正在使用Microsoft Visual Studios,并且我创建了一个泛型类List_Array。默认构造函数没有问题,但其他两个(重载)构造函数生成错误。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