对已定义的构造函数的未解析引用 [duplicate]

Unresolved reference to constructor which is defined [duplicate]

提问人:brettwhiteman 提问时间:1/3/2015 最后编辑:Captain Obvliousbrettwhiteman 更新时间:1/3/2015 访问量:658

问:

我得到了一个unresolved external symbol "public: __thiscall TestLanguage::TestLanguage(void)" (??0TestLanguage@@QAE@XZ) referenced in function _main

据我所知,构造函数是定义的,但显然编译器看不到它。我唯一的结论是存在某种包含问题(例如循环包含)。TestLanguage

我已经为下面的每个翻译单元制作了包含图,但是我看不出任何问题。任何指导将不胜感激。

包括:

Test.cpp
    Expression.h
        Operation.h
        Token.h
    CPU.h
        Operation.h
    TestLanguage.h
        ILanguage.h
        TLOperators.h
            IOperator.h
                Operation.h
                Token.h

TestLanguage.cpp
    TestLanguage.h
        ILanguage.h
        TLOperators.h
            IOperator.h
                Operation.h
                Token.h

TLOperators.cpp
    TLOperators.h
        IOperator.h
            Operation.h
            Token.h
    Expression.h
        Operation.h
        Token.h
    CPU.h
        Operation.h

CPU.cpp
    CPU.h
        Operation.h
    Operation.h

Expression.cpp
    Expression.h
        Operation.h
        Token.h
    Util.h
    IOperator.h
        Operation.h
        Token.h
    CPU.h
        Operation.h
    ILanguage.h

Operation.cpp
    Operation.h

Token.cpp
    Token.h
C++ visual-studio-2013 包括 未解析的外部

评论

3赞 inetknght 1/3/2015
你有MCVE吗?stackoverflow.com/help/mcve
1赞 brettwhiteman 1/3/2015
@inetknght我会试着把一个放在一起。
5赞 Praetorian 1/3/2015
我还没有投反对票(还没有投:)),但这怎么是一个合理的问题?你没有给我们任何有用的信息。它们包含的源文件和标头的巨大树是没有用的,因为 1.我们无法知道它是否正确 2.没有任何内容可以表明您是否提供了相关构造函数的定义。
0赞 juanchopanza 1/3/2015
@Brett我没有重复投票。我选择了一个“偏离主题”的选项,即要求 MCVE 的选项。这是 stackoverflow 关闭系统的产物,只出现一个原因(大概是大多数原因,我不同意。不过,在您的问题顶部有一个链接。
2赞 Praetorian 1/3/2015
通常我确实相信 OP 会提供正确的信息,但您发布的内容很容易出错。而且,即使我不怀疑任何包含的东西,它又有什么用呢?发生此错误的原因是链接器无法找到定义,这使得有关哪些翻译单元看到类定义的信息变得无关紧要。没有人希望你发布一个完美的问题,否则就不需要评论部分了。但我们确实希望您提供相关信息。我知道你不是故意隐瞒的,但抱怨反对票无济于事。

答:

0赞 brettwhiteman 1/3/2015 #1

在尝试按照@inetknght的建议创建 MCVE 后(顺便说一句),我发现它实际上是 Visual Studio Express 2013 中的一个错误。我将所有源文件复制到一个新项目中,因此我可以继续删除内容以获得最小的示例,但是它在新项目中编译得很好。

尝试修复原始项目时,我清理了解决方案,手动删除了对象文件,删除了项目中的 .sdf 文件。这些都行不通。然后我尝试从项目中删除 TestLanguage.cpp 文件并将其添加回去 - 它起作用了。

希望这将帮助任何经历过这种情况的人。

评论

1赞 Captain Obvlious 1/3/2015
听起来有问题的源文件已从构建中排除。
1赞 Ofek Shilon 6/15/2015
听起来你手下有一个小的一致的复制品。在连接时报告并让 MS 进行调查怎么样?在你这样做之前,你不能确定它确实是一个 VS 错误。