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

时间:2011-06-05 07:14:02

标签: c++ visual-studio-2010 linker compilation

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

一些'技术'细节:

  • 我在.cpp文件上使用#pragma一次。我知道最终他们没有(或者不应该)做任何事情,因为.cpp文件没有被包含在其他文件中,但是我养成了在我创建的每个代码文件的顶部写这个的坏习惯。

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

  • 该类包含项目的其他标题,但许多文件中包含相同的标题,但此特定类只是编译问题的类。

  • 在我编写了一个我的类包含和使用的模板类之后不久就出现了问题,但是,如上所述,其他类没有问题(所以我无法判断模板是否是与问题没有真正关系。)

最奇怪的部分是:

  • 当链接器因“未找到符号”异常而失败时(它仅在某些时候执行此操作),如果我在类.cpp文件中切换#pragma once指令,则下一次编译将起作用。这意味着有时我需要评论“#pragma once”才能获得成功的编译,有时我需要取消注释。

如果您需要更多信息,例如班级的.h和.cpp文件,我会尽快写下来。

谢谢你的时间!

编辑:

更多信息:

  • 当问题首次出现时,我试图尽可能多地评论该类的方法和字段,试图找出问题所在。有时,删除类和模板之间的链接导致良好的编译,但后来它并不重要。在我的项目的不同部分(文件/名称空间/等)中添加类的实例也没有任何区别。

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

  • 这是我唯一遇到问题的项目,我已经在问题开始之前和之后成功地编写并运行了许多其他项目,并且具有相同的编程风格。

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

1 个答案:

答案 0 :(得分:0)

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

对于便携式代码,我的收费是避免#pragma一次。