2016-03-24 32 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>类型的对象的定义。