2017-04-21 7 views
1

私はMicrosoft Visual Studiosを使用しており、汎用クラスのList_Arrayを作成しています。デフォルトコンストラクタに問題はありませんが、他の2つの(オーバーロードされた)コンストラクタがエラーを生成しています。テンプレートのコンストラクタで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

関連する問題