2016-05-23 2 views
-1

Ich habe diesen Fehler seit einiger Zeit bekommen, und ich habe keine Ahnung, wie Sie es beheben. Ich suchte hier nach ähnlichen Problem auf Stack-Overflow, aber ich habe nichts gefunden.Fehler: 'Vorlage <class T> Klasse Dynamic_Array' ohne Template-Parameter verwendet

QUELLCODE:

template <typename T> 
class Dynamic_Array 
{ 
private: 
    T* actual_array; 
    unsigned int number_of_elements; 
public: 
    Dynamic_Array() {} 
    ~Dynamic_Array() {delete[] actual_array;} 

    unsigned int get_size() const {return number_of_elements;} 

    T& operator [](unsigned int index) {return actual_array[index];} 
    void operator +=(T&); 
    void operator -=(unsigned int); 

}; 

template <typename T> /*Not sure if this is needed, but compiler doesn't mind, still prints the same error*/ 

void Dynamic_Array<T>::operator+=(T& object) 
{ 
    if(number_of_elements>1) 
    { 
     T* temp_array = new T[number_of_elements]; 
     for(unsigned int i=0;i<number_of_elements;i++) 
     { 
      temp_array[i]=actual_array[i]; 
     } 
     delete[] actual_array; 

     actual_array = new T[number_of_elements+1]; 
     for(unsigned int i=0;i<number_of_elements;i++) 
     { 
      actual_array[i]=temp_array[i]; 
     } 
     delete [] temp_array; 
     temp_array=NULL; 

     actual_array[number_of_elements]=object; 

     number_of_elements++; 
    } 
    else 
    { 
     number_of_elements++; 
     actual_array = new T[1]; 
    } 
} 
void Dynamic_Array<T>::operator-=(unsigned int index) 
{ 
    T* temp_array = new T[number_of_elements-1]; 
    for(unsigned int i=0, j=0;i<number_of_elements;i++) 
    { 
     if(i!=index) 
     { 
      temp_array[j]=actual_array[i]; 
      j++; 
     } 
    } 
    delete[] actual_array; 
    number_of_elements--; 

    actual_array = new T[number_of_elements]; 
    for(unsigned int i=0;i<number_of_elements;i++) 
    { 
     actual_array[i]=temp_array[i]; 
    } 
    delete [] temp_array; 
    temp_array = NULL; 
} 

Nach Compiler ist der Fehler in der Leitung 18 (die leeren zwischen "}", und "template"

Wie gesagt, ich habe keine Ahnung was ich oben geschraubt, so dass jede Hilfe sehr geschätzt wird.

+0

F oder Ihr nächster Fehler: [Rule of Three/Five/Zero] (http://en.cppreference.com/w/cpp/language/rule_of_three) – Barry

+0

Nein, es ist kurz nach der Klassendeklaration. – XONX

+0

Bitte geben Sie eine [mcve] an. – Barry

Antwort

1

Wenn Sie Member-Funktionen außerhalb einer Klasse Template-Deklaration definieren, dann müssen Sie die Vorlage für jede Funktion angegeben werden. Wenn Sie

definieren
void Dynamic_Array<T>::operator-=(unsigned int index) 
{ 
    //... 
} 

Sie müssen auch die Vorlage Teil haben, wie

template <typename T> 
void Dynamic_Array<T>::operator-=(unsigned int index) 
{ 
    //... 
} 

Dieses Präsent für alle Funktionsdefinition sein muss, die Sie aus der Reihe zu tun. Eine einzelne template <typename T> am Anfang aller Definition gilt nicht für alle Funktionsdefinitionen. so

+0

Nun, es gibt eine vor der Operatordefinition + =. BEARBEITEN: Auch wenn ich einen anderen vor der Operatordefinition - = hinzugefügt habe, bekomme ich immer noch den gleichen Fehler. – XONX

+0

@XONX Sie müssen dies für jede Funktion tun, die Sie außerhalb des Klassenkörpers definieren. – NathanOliver

0

Dynamic_Array eine Template-Klasse ist, wenn operator+= und operator-= außerhalb des Bereichs der Klasse definieren Sie benötigen Vorlagentyp zu schaffen, wie folgt: Ich sollte

template<typename T> void Dynamic_Array<T>::operator+=(T& object) { 
    //... 
} 

template<typename T> void Dynamic_Array<T>::operator-=(unsigned int index) { 
    //... 
} 

Beachten Sie auch, dass es etwas seltsam ist void zu haben als Rückgabetyp für operator+= und operator-=, in der Regel sollten Sie einen Verweis auf die geänderte Instanz this zurückkehren, das heißt:

template<typename T> Dynamic_Array<T>& Dynamic_Array<T>::operator+=(const T& object) { 
    //... 
} 
+0

Ja, ich weiß, dass ich wahrscheinlich eine Menge Fehler bei der Erstellung einer dynamischen Array-Klasse gemacht habe, aber ich mache mir mehr Sorgen um das Template-Problem, das auch nach Vorlage von Templates für jede Member-Funktion gilt. Danke für den Rat tho. – XONX

Verwandte Themen