【发布时间】:2013-10-07 17:48:05
【问题描述】:
我正在制作自己的矢量类。
.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.o ld 中的 _main:未找到架构 x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看 调用)
我最初编写这个类是为了使用已经指定的类型,现在我需要它来使用任何给定的类型。
为什么会出现此错误?提前致谢!
【问题讨论】:
-
问个问题,你为什么要开发自己的向量?也许这只是为了好玩或练习,但也许这是一个 XY 问题。
-
使用C++模板时,所有代码都需要在header中。
-
为什么大家都说模板all代码需要在header中?人们真的知道什么是必需的并且只是过于简单化(我担心情况并非如此)吗?还是人们只是不理解,只是重复他们曾经听到的内容?
-
@DavidRodríguez-dribeas:我会赌后者。
-
@JohnDibling:那是我的恐惧。我一直试图在很多我迷失方向(同时也感到疲倦)中解释这一点