具有空括号的默认构造函数C ++错误

时间:2016-03-24 22:22:46

标签: c++ templates definition

我不知道为什么它在创建类Vector时会崩溃。请帮忙。在这个程序中,我想将任何类型的元素添加到数组中。我使用eclipse与Cross gcc,Ubuntu

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 个答案:

答案 0 :(得分:1)

您需要将成员函数定义(包括构造函数定义)放在定义模板类的同一标头中。

至于这句话

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

然后它是一个函数声明,它具有返回类型Vector<int>并且没有参数。它不是Vector<int>类型对象的定义。