自定义向量类C ++

时间:2013-10-07 17:48:06

标签: c++ class vector

我正在创建自己的矢量类。

·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查看   调用)

我最初编写的类使用已经指定的类型,现在我需要它来处理任何给定的类型。

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

1 个答案:

答案 0 :(得分:5)

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

请参阅here,了解模板的工作方式/原因。