2016-05-23 72 views
-1

我已經收到這個錯誤一段時間了,我不知道如何解決它。 我在堆棧溢出中搜索了類似的問題,但是我找不到任何東西。錯誤:'template <class T> class Dynamic_Array'used without template parameters

源代碼:

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

根據編譯器,該錯誤是存在於第18行(之間的空單「};」和「模板」

正如我說,我不知道我搞砸了,所以任何幫助表示讚賞。

+0

˚F或你的下一個錯誤:[規則三/五/零](http://en.cppreference.com/w/cpp/language/rule_of_three) – Barry

+0

不,它只是在類聲明之後。 – XONX

+0

請提供[mcve]。 – Barry

回答

1

當你定義一個類模板聲明之外的成員函數,那麼你需要指定每個功能的模板。當你定義

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

你需要有模板部分以及像

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

這必須是禮物,你做了線的每個函數定義。所有定義開始時的一個template <typename T>不適用於所有的函數定義。

+0

好吧,在+ =運算符定義之前有一個。編輯:另外,當我在 - =運算符定義之前添加另一個時,我仍然得到相同的錯誤。 – XONX

+0

@XONX您必須爲您在課程體外定義的每個功能都做到這一點。 – NathanOliver

0

Dynamic_Array是一個模板類,所以定義operator+=operator-=您需要提供模板類型如下類的範圍之外時:

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

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

另外,我要指出,這是有些奇怪有void作爲返回類型爲operator+=operator-=,通常你應該返回一個參考的this改變的情況下,即:

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

是的,我意識到我可能在製作一個動態數組類時犯了很多錯誤,但我現在更關心模板問題,即使在爲每個成員函數提供模板之後,它仍然適用。感謝您的建議。 – XONX

相關問題