gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:13:28 28 4
gpt4 key购买 nike

所以我正在尝试构建一个小型 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com