【问题标题】:custom vector class C++ [duplicate]自定义矢量类 C++ [重复]
【发布时间】: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:那是我的恐惧。我一直试图在很多我迷失方向(同时也感到疲倦)中解释这一点

标签: c++ class vector


【解决方案1】:

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

请参阅here,了解有关模板如何/为何工作的详细概述。

【讨论】:

  • 非常感谢!完美运行
猜你喜欢
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
相关资源
最近更新 更多