错误 lnk2005 已在 .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 stduio 2013 上 运行 这些代码时,它会抛出错误。它说 error LNK2005: "void __cdecl World::WorldObjects2(unsigned int)" (?WorldObjects2@World@@YAXI@Z) already defined in main.obj
。我该如何纠正这个错误?
您的项目有两个函数定义 WorldObjects2
:一个在编译单元 test.cpp
中,另一个在编译单元 main.cpp
中,因为 header 其中定义的函数包含在这两个 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)
{
.......
}
}
}
关于这个错误有很多问题。但它们只与一个变量有关。
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 stduio 2013 上 运行 这些代码时,它会抛出错误。它说 error LNK2005: "void __cdecl World::WorldObjects2(unsigned int)" (?WorldObjects2@World@@YAXI@Z) already defined in main.obj
。我该如何纠正这个错误?
您的项目有两个函数定义 WorldObjects2
:一个在编译单元 test.cpp
中,另一个在编译单元 main.cpp
中,因为 header 其中定义的函数包含在这两个 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)
{
.......
}
}
}