2017-04-21 1 views
1

Ich verwende Microsoft Visual Studios und ich habe eine generische Klasse List_Array erstellen. Es gibt kein Problem mit dem Standardkonstruktor, aber die anderen zwei (überladenen) Konstruktoren erzeugen den Fehler.C2244 Fehler mit Template Constructor Overload

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

Ich bekomme eine C2244 ‚List_Array :: List_Array‘: nicht in der Lage Funktionsdefinition zu einer vorhandenen Deklaration

Jede Hilfe willkommen ist viel zu entsprechen!

Antwort

0

Das Problem hat nichts mit Schablone oder Überladung zu tun. Sie brauchen nur keinen List_Array<T>:: Teil für die Memberfunktionsdeklaration innerhalb der Klassendefinition. das heiß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

Vielen Dank! Ich wusste nicht, dass das ein Problem verursachen würde. –

+0

@TylerHughes Beachten Sie, dass dies auch für Nicht-Template-Klassen gilt. Das Problem hat also nichts mit Template und Überladung zu tun. – songyuanyao