链接器没有认识到一些#includes?

时间:2011-09-09 21:54:50

标签: c++ visual-c++ linker include

我有一个包含多个项目和多个名称空间的VC ++解决方案。每个项目都有自己的命名空间,有些项目有多个命名空间。

有时候,当我从另一个项目引用一个对象时,我最终会遇到“未解析的外部符号”错误,即使我#included头文件并通过它的命名空间(Namespace :: object)引用该对象。为了摆脱链接器错误,我还必须#include cpp文件,然后我得到符号定义两次的警告。

这非常hackish,我不喜欢hackish。

我知道我需要仔细查看所有包含依赖项,因为有些东西显然搞砸了,但我还没有找到任何重大问题。

与此同时,是否有人对任何明显的问题或任何导致此问题的常见原因有任何建议?

3 个答案:

答案 0 :(得分:4)

“未解析的外部符号”是链接器错误。而链接并不关心#included的内容(除非涉及#pragmas)。所有链接关注都是您明确声明要链接的内容。

您尝试使用的其他项目在编译时必须生成库或其他项目,对吧?您应链接到项目设置中的那些。

答案 1 :(得分:2)

链接目标文件不是使用#include预处理程序命令完成的,而是通过VC ++本身或(非标准)#pragma命令完成的。

答案 2 :(得分:2)

如果您使用的是Visual C ++,请转到项目属性,在Linker > Input下,您应该添加您所依赖的项目的已编译.lib文件。
像其他人所说的那样,你遗漏的编译单元与你#include的文件无关(只与编译相关,而不是链接)