我正在创建自己的矢量类。
·H:
template<typename T>
class MyVector
{
private:
T *elements;
int elementCount;
public:
MyVector();
MyVector(int size);
void push_back(T value);
void pop_back();
int size();
T at(int index);
bool empty();
void clear();
void swap(MyVector v2);
};
的.cpp:
template<typename T>
MyVector<T>::MyVector()
{
elementCount = 0;
elements = new int[elementCount];
elements = (int *) realloc (elements, elementCount * sizeof(int));
}
main.cpp中:
#include "MyVector.h"
int main()
{
MyVector<char> myTestVector;
return 0;
}
我在尝试简单地创建一个MyVector对象时遇到错误,错误是:
MyVector :: MyVector(),引自: _main in main.o ld:找不到架构x86_64 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看 调用)
我最初编写的类使用已经指定的类型,现在我需要它来处理任何给定的类型。
为什么我收到此错误?提前谢谢!
答案 0 :(得分:5)
C ++模板必须在头文件中定义它们。这是因为编译器在编译时为每个实例类型生成目标文件。如果将声明移动到.h文件,则代码应链接正常。
请参阅here,了解模板的工作方式/原因。