gpt4 book ai didi

c++ - 错误 lnk2005 已在 .obj 中定义

转载 作者:行者123 更新时间:2023-11-30 02:38:44 24 4
gpt4 key购买 nike

关于这个错误有很多疑问。但它们只与一个变量相关。

测试.h

namespace World
{
enum Objects
{
TERRAIN = 1,
BOX = 2,
SPHERE = 4,
CAPSULE = 8

};

void WorldObjects2(unsigned int mask)
{
.......
}
}

void test();

测试.cpp

#include "test.h"

void test()
{
.......
}

main.cpp

#include "test.h"
int main()
{
test();
return 0;
}

当我在 visual stduio 2013 上运行这些代码时,它会抛出一个错误。它说 error LNK2005: "void __cdecl World::WorldObjects2(unsigned int)"(?WorldObjects2@World@@YAXI@Z) already defined in main.obj。我该如何纠正这个错误?

最佳答案

您的项目有两个函数 WorldObjects2 的定义:一个在编译单元 test.cpp 中,另一个在编译单元 main.cpp 因为定义函数的头文件包含在这两个 cpp 文件中。

要么使用函数说明符inline

inline void WorldObjects2(unsigned int mask)
{
.......
}

或者将函数定义移动到某个 cpp 文件中,仅在 header 中留下函数声明(没有其定义)。

另一种方法是使函数具有内部链接。例如,您可以添加关键字 static

static void WorldObjects2(unsigned int mask)
{
.......
}

或者可以将函数放在给定命名空间内的未命名命名空间中。

namespace World
{
// ...
namespace
{
void WorldObjects2(unsigned int mask)
{
.......
}
}
}

关于c++ - 错误 lnk2005 已在 .obj 中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30501919/

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