(1)源文件一定要有宏包含:
#ifndef _VECTOR_CPP_
#define _VECTOR_CPP_
(2)头文件尾部一定要有宏包含:
#include "Vector.cpp"
(3)在源文件中定义类模板的构造函数和赋值操作符时,一定要注意,
正确形式如下:
```cpp
//Vector.cpp
#ifndef _VECTOR_CPP_
#define _VECTOR_CPP_
#include "Vector.h"
//move constructor and move assignment operator
template<typename T>
Vector<T>::Vector(Vector&& rhs) :theSize(rhs.theSize),
theCapacity(rhs.capacity), objects(rhs.objects)
{
rhs.theSize = 0;
rhs.theCapacity = 0;
rhs.objects = nullptr;
}
template<typename T>
Vector<T>& Vector<T>::operator=(Vector&& rhs)
{
std::swap(theSize, rhs.theSize);
std::swap(theCapacity, rhs.theCapacity);
std::swap(objects, rhs.objects);
return *this;
}
//resize
template<typename T>
void Vector<T>::resize(int newsize)
{
if (newsize > theCapacity)
reserve(2 * newsize);
theSize = newsize;
}
//reserve
template<typename T>
void Vector<T>::reserve(int newcapacity)
{
if (newcapacity < theSize)
return;
T* newarray = new T[newcapacity];
for (int i = 0; i < theSize; ++i)
newarray[i] = std::move(objects[i]);
theCapacity = newcapacity;
std::swap(newarray, objects);
delete[] newarray;
}