Visual Studio 2010 C++笨拙的链接器不稳定的行为

Visual Studio 2010 C++ awkward linker erratic behaviour

本文关键字:链接 不稳定 Studio 2010 C++ Visual      更新时间:2023-10-16

在一个大项目中,我遇到了这个问题:链接器不时拒绝"查看"类的实现,在找到特定类(Board)的方法的地方抛出"未找到符号"异常。

一些"技术"细节:

  • 我在.cpp文件上使用过一次#pragma。我知道他们最终什么都不做(或者不应该做),因为.cpp文件不包括在其他文件中,但我养成了在创建的每个代码文件的顶部都写这个的坏习惯。

  • 该类实现了在其.h文件中声明的所有方法

  • 该类包括项目的其他头,但许多文件中都包含相同的头,但这个特定的类是唯一存在编译问题的类。

  • 在我写了一个模板类后不久,问题就开始出现了,我的类包括并使用了这个模板类,但如上所述,其他类对此没有问题(所以我不知道这个模板是否真的与问题有关)。

最奇怪的部分是:

  • 当链接器因"symbol not found"异常而失败时(它只在某些情况下会这样做),如果我在class.cpp文件中切换#pragma once指令,则下一次编译可以进行。这意味着有时我需要注释"#pragma once"才能成功编译,而其他时候我需要取消注释

如果您需要更多信息,比如类的.h和.cpp文件,我会尽快编写。

谢谢你抽出时间!

编辑:

更多信息:

  • 当问题第一次出现时,我试图对类中尽可能多的方法和字段进行注释,试图隔离问题。有时,删除类和模板之间的链接会产生良好的编译效果,但后来这并不重要。在我的项目的不同部分(文件/名称空间等)中添加类的实例也没有任何区别。

  • Visual Studio安装在C:\上,项目安装在D:\上,两个分区都是NTFS。

  • 这是我唯一遇到问题的项目,在这个项目出现问题之前和之后,我用相同的编程风格成功地制作、编译和运行了许多其他项目。

  • 当问题出现时,我尝试重建整个项目并手动清理.obj文件,但没有任何区别。

此链接http://www.cplusplus.com/forum/beginner/7877/为不同风格的incude卫士提供了有趣的讨论
这表明#pragma一旦失败,可能会对你有所帮助。

我的感觉是避免#pragma一次,对于可移植代码。