错误链接2005已经在.obj中定义
Error lnk2005 already defined in .obj
关于这个错误有很多疑问。但它们只与一个变量有关。
test.h
namespace World
{
enum Objects
{
TERRAIN = 1,
BOX = 2,
SPHERE = 4,
CAPSULE = 8
};
void WorldObjects2(unsigned int mask)
{
.......
}
}
void test();
test.cpp
#include "test.h"
void test()
{
.......
}
main.cpp
#include "test.h"
int main()
{
test();
return 0;
}
当我在visual studio 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文件中,在头文件中只留下函数声明(没有函数定义)。
另一种方法是使函数具有内部链接。例如,您可以添加关键字static
static void WorldObjects2(unsigned int mask)
{
.......
}
或者可以将函数放置在给定命名空间内的未命名命名空间中。
namespace World
{
// ...
namespace
{
void WorldObjects2(unsigned int mask)
{
.......
}
}
}
相关文章:
- float* 已在 Gameobject.obj 中定义
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- C++ LNK 2005 错误"已在 .obj 中定义
- "... already defined in *.obj"但我没有在同一范围内两次定义任何变量
- 已经在 .obj 中定义,即使有 #ifndef #define #endif
- 需要的具体示例.错误:已经定义的.OBJ 一个或多个多个定义的符号
- Main.Obj中已经定义的主要
- 变量已在 .obj 中定义;这是怎么回事?
- 已在 ConsoleApplication1.obj 中定义
- DllMain 已在 dllmain.obj 中定义
- 已在main.obj中定义了双精度
- 错误LNK2005结构已在.obj文件中定义
- 已经在main.obj中定义了
- 变量已在 .obj 中定义,但没有循环包含
- 成员函数已在.obj(visual studio)中定义
- 链接器错误: /* 项实例 */ 已在项.obj 中定义
- 错误 11 错误 LNK2005:已在 MyForm.obj 中定义"class cv::Mat imageOutput" (?imageOutput@@3VMat@cv@@A)
- 错误 LNK2005:"class Player m_player"已在 Game.obj 中定义
- 已经定义了 Obj?链接错误
- LNK2005错误,已在main.obj中定义