c++ - 静态库多重定义链接错误

标签 c++ linker-errors

所以我正在尝试构建一个小型 3D 引擎作为 VC++ 8.0 上的练习。我有一个 MathLib 静态库和一个由我的 TestBed exe 链接的渲染静态库。现在 Render 有两个类:Color 和 DXManager3D。颜色包括我来自 MathLib 的 Vector.h,没问题。

第二次我尝试在 DXManager3D 中包含 Vector.h 它让我大吃一惊,说符号被定义了两次,而第二个定义被忽略了(来自 lib 的警告)。我认为可能包含它两次是导致此问题的原因,因此作为测试,我从 Color.h 中删除了 Vector.h 并将其留在 DXManager3D.h 中 - 同样的问题。我已经进行了三重检查,以确保我将所有东西都包裹在 ifndef 中以防止这种情况发生,所以我只能抓耳挠腮了。

DXManager3D.obj : warning LNK4006: "public: __thiscall Math::Vector::Vector(void)" (??0Vector@Math@@QAE@XZ) already defined in Render.obj; second definition ignored

真正让我困惑的是,当我构建与 TestBed 分开的 Render.lib 时,它不应该链接任何东西,因为它是一个静态库,对吧?我仍然收到多个符号定义警告。如果我在 main 中实例化一个 DXManager3D,我的警告就会变成错误。

Render.lib(DXManager3D.obj) : error LNK2005: "public: __thiscall Math::Vector::Vector(void)" (??0Vector@Math@@QAE@XZ) already defined in WinMain.obj

是的,我有 F1'd LNK4006 和 LNK2005,但 MSDN 中的解决方案对我不起作用。 抱歉,如果之前有人问过这个问题,我找不到任何可靠的东西来帮助我使用搜索功能。

谢谢!

最佳答案

您的 Vector 构造函数是否在类定义之外的 header 中定义?使其内联然后即更改

class Vector {
  public:
    Vector();
  // ...
}; 

Vector::Vector() {
   // ...
}

class Vector {
  public:
  Vector() {}
  // ...
}; 

或使用明确的内联限定:

class Vector {
   public:
  Vector();
  // ...
}; 

inline Vector::Vector() {
   // ...
}

关于c++ - 静态库多重定义链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/717622/

相关文章:

c++ - 未找到外部声明的模板专用函数

ios - 找不到框架,链接器命令失败,退出代码为 1(使用 -v 查看调用)

c++ - 'identifier' 已有正文但未找到标识符

c++ - 为 streambuf boost ASIO ForwardIterator

c - 不知道为什么我会收到链接错误

boost::filesystem 的 C++ 链接错误

c++ - 无法在 Visual Studio 2015 托管单元测试项目中打开 DLL 文件?

c++ - RVO 何时显示出最大的性能影响?

c++ - C++中的正则表达式问题

c++ - 在数组中插入数据时出错 - 数组下标的无效类型 'int[int]'