2017-04-21 2 views
1

J'utilise Microsoft Visual Studios et j'ai créé une classe générique List_Array. Il n'y a pas de problème avec le constructeur par défaut, mais les deux autres constructeurs (surchargés) génèrent l'erreur.C2244 Erreur avec la surcharge du constructeur de modèle

//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; 
    } 
} 

je reçois un C2244 « List_Array :: List_Array »: incapable de faire correspondre la définition de fonction à une déclaration existante

Toute aide est très appréciée!

Répondre

0

Le problème n'a rien à voir avec le modèle ou la surcharge. Vous n'avez simplement pas besoin de la pièce List_Array<T>:: pour la déclaration de la fonction membre dans la définition de classe. à savoir

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

LIVE

+0

Merci! Je n'avais pas réalisé que cela causerait un problème. –

+0

@TylerHughes Notez que ceci est également vrai pour les classes non-template. Donc, le problème n'a rien à voir avec le modèle et la surcharge ici. – songyuanyao