【发布时间】:2009-11-24 04:39:31
【问题描述】:
我正在编译一些依赖于包含保护来防止对象和函数的多个定义的代码,但是 Visual Studio 2008 给我的链接错误是有多个定义。我不明白为什么,因为我以前使用过与此非常相似的代码并且它没有引起问题。我一定在做一些愚蠢的事情,但我不知道它是什么。我还尝试取出包含防护并使用#pragma 一次,但我得到相同的链接错误。我应该检查什么?
【问题讨论】:
标签: c++
我正在编译一些依赖于包含保护来防止对象和函数的多个定义的代码,但是 Visual Studio 2008 给我的链接错误是有多个定义。我不明白为什么,因为我以前使用过与此非常相似的代码并且它没有引起问题。我一定在做一些愚蠢的事情,但我不知道它是什么。我还尝试取出包含防护并使用#pragma 一次,但我得到相同的链接错误。我应该检查什么?
【问题讨论】:
标签: c++
如果它们是链接器错误,最可能的原因可能是标头中定义的非内联函数。
如果您在包含在多个源文件中的标头中有一个非内联函数,它将在每个源文件(“翻译单元”)中定义,因此该函数将被定义多次,因此出现多重定义错误。
【讨论】:
如果您遇到链接器错误...您确定您不是 1) 实际上在代码中定义了两次函数或 2) 尝试做一些愚蠢的事情,例如 #include 源文件(而不是标题文件)?
【讨论】:
这也可能是由于使用了来自其他库链接的不同版本的 cstd 库。检查 c++/代码生成部分并确保所有项目都使用相同的设置。
【讨论】: