c ++模板混淆

时间:2012-05-25 08:24:04

标签: c++

我正在使用模板编写一些代码,但是我遇到了一些链接错误:

  

[链接器错误]未定义引用`Vector :: Vector(Vector const&)'

但我在.cpp中编写了这个函数。这是代码。

template <class T>

Vector<T>::Vector(Vector const& r)
{


m_nSize = r.size();
int i = 0;
m_pElements = new T[m_nSize];
    while(i <= m_nSize)
{
    m_pElements[i] = r[i];
    i++;
}
}

并在.h:

中声明
template <class T>

class Vector
{

public:

Vector():m_nSize(0){ m_pElements = (T*)NULL; }
Vector(int size):m_nSize(size){ m_pElements = new T[size]; }
Vector(const Vector& r);
virtual ~Vector(){ delete m_pElements; }
T& operator[](int index){ return m_pElements[index];}
int size(){return m_nSize;}
int inflate(int addSize);
private:

    T *m_pElements;
    int m_nSize;
};

我现在真的很困惑......我该怎么做才能纠正?

2 个答案:

答案 0 :(得分:3)

You should make implementations visible。移动

template <class T>
Vector<T>::Vector(Vector const& r)
{
    //....
}

cpp文件到标题。

答案 1 :(得分:2)

请参阅C ++ faq(http://www.parashift.com/c++-faq-lite/templates.html#faq-35.13)。基本上将代码放在头文件中。