一旦工作,为什么不包括警卫或编译?

时间:2009-11-24 04:39:32

标签: c++

我正在编译一些依赖于包含保护的代码,以防止对象和函数的多个定义,但Visual Studio 2008给了我链接错误,有多个定义。我不明白为什么,因为我之前使用的代码非常类似,并没有造成问题。我必须做一些愚蠢的事,但我不知道它是什么。我也尝试取出包含警卫并使用#pragma一次,但我得到了相同的链接错误。我应该检查什么?

3 个答案:

答案 0 :(得分:23)

如果它们是链接器错误,最可能的原因可能是标头中定义的非内联函数。

如果在包含在多个源文件中的标头中有非内联函数,则将在每个源文件(“翻译单元”)中定义它,因此将不止一次定义该函数因此多重​​定义错误。

答案 1 :(得分:1)

如果你收到链接器错误......你确定你不是1)在代码中实际定义一个函数两次或者2)试图像#include那样愚蠢地做一个源文件(而不是头文件)?

答案 2 :(得分:0)

这也可以通过使用其他库中链接的cstd lib的不同版本引起。检查c ++ / Code generation部分,确保所有项目都使用相同的设置。