【问题标题】:Unresolved reference to constructor which is defined [duplicate]未解决的对定义的构造函数的引用[重复]
【发布时间】:2015-03-01 04:06:13
【问题描述】:

我收到了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

【问题讨论】:

  • 您有 MCVE 吗? stackoverflow.com/help/mcve
  • @inetknght 我会尽量凑齐。
  • 我还没有投反对票(还 :)),但这是一个合理的问题吗?您没有向我们提供任何有用的信息。它们包含的源文件和头文件的巨大树没有用,因为 1. 我们无法知道它是否正确 2. 没有任何迹象表明您是否提供了相关构造函数的定义。
  • @Brett 我没有重复投票。我选择了“离题”选项之一,即要求 MCVE 的选项。这是stackoverflow关闭系统的一个工件,只出现一个原因(可能是大多数原因,我不同意。)不过,您的问题顶部有一个链接。
  • 通常我相信 OP 会提供正确的信息,但您发布的内容很容易出错。而且,即使我不怀疑任何包含的东西,它有什么用处? 发生错误是因为链接器无法找到定义,这使得有关哪些翻译单元的信息可以看到类定义无关。没有人希望你发布一个完美的问题,否则就不需要 cmets 部分。但我们确实希望您提供相关信息。我知道您不是故意隐瞒的,但抱怨投反对票并没有任何帮助。

标签: c++ visual-studio-2013 include unresolved-external


【解决方案1】:

在尝试按照@inetknght 的建议创建MCVE 之后(感谢BTW),我发现它实际上是Visual Studio Express 2013 中的一个错误。我将所有源文件复制到一个新项目中,这样我就可以保留删除东西以获得最小的示例,但是它在新项目中编译得很好。

在尝试修复原始项目时,我清理了解决方案,手动删除了目标文件,删除了项目中的 .sdf 文件。这些都没有奏效。然后我尝试从项目中删除 TestLanguage.cpp 文件并将其添加回来 - 它有效。

希望这将帮助任何其他遇到这种情况的人。

【讨论】:

  • 听起来有问题的源文件已从构建中排除。
  • 听起来你手下有一个小而一致的复制品。如何在连接时报告它并让 MS 进行调查?在你这样做之前,你不能确定它确实是一个 VS 错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多