2016-03-24 60 views
0

我不知道爲什麼當我創建類Vector時它崩潰了。請幫忙。在這個程序中,我想將任何類型的元素添加到數組中。我在Cross gcc上使用eclipse,Ubuntu具有空括號的默認構造函數C++錯誤

template<typename T> 
class Vector{ 
    public: 
     Vector(); 
     void add(const T&); 
    private: 
     T *elem; 
     int cap; 
     int len; 
}; 

template<typename T> 
Vector<T>::Vector(){ 
    len = 0; 
    cap = 30; 
    elem = new T[cap]; 
} 

template<typename T> 
void Vector<T>::(const T& m){ 
    elem[len] = m; 
    len ++; 
} 

// Here I create Vector v, if I put Vector<int> v() I don't get error 
Vector<int> v; //error "undefined reference to `Vector<int>::Vector()" 
v.add(21); //error 
+1

請提供[mcve]。 – Barry

+0

@布萊恩你不使用「非常有趣的功能」是非常有趣的。我甚至無法想象這個:) :) –

+0

編譯器需要在您打算使用'Vector '的地方看到模板定義(包括'Vector '類和它的成員函數)。單獨的編譯和模板不能很好地協作。將成員函數的定義放在聲明類的頭文件中,並確保在需要使用Vector矢量模板的代碼中包含該頭文件。 [這不是一個完整的答案]。 – Peter

回答

1

您需要將成員函數定義(包括構造函數定義)放置在模板類定義的相同頭文件中。

至於這種說法

// here i create Vector v, if i put Vector<int> v() i don't get error 
Vector<int> v(); 

那麼它是一個具有返回類型Vector<int>,沒有參數的函數聲明。它不是Vector<int>類型的對象的定義。