1

我正在制作自己的矢量类。

。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));
}

主.cpp:

#include "MyVector.h"

int main()
{
    MyVector<char> myTestVector;   
    return 0;
}

尝试简单地创建 MyVector 对象时出现错误,错误是:

MyVector::MyVector(),引用自:main.old 中的 _main:未找到架构 x86_64 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

我最初编写这个类是为了使用已经指定的类型,现在我需要它来使用任何给定的类型。

为什么我会收到此错误?提前致谢!

4

1 回答 1

5

C++ 模板的定义必须在头文件中。这是因为编译器在编译时为每个实例类型生成目标文件。如果您将声明移至 .h 文件,您的代码应该可以正常链接。

有关模板如何/为何工作的详细概述,请参见此处。

于 2013-10-07T17:53:43.280 回答