【问题标题】:C++ Unresolved External Symbol error? [duplicate]C++ 未解决的外部符号错误? [复制]
【发布时间】:2014-04-08 16:34:14
【问题描述】:

我是编程初学者,熟悉 Java,但我目前在使用 C++ 时遇到了一些麻烦。我收到以下错误:未解析的外部符号,当我尝试在不同类的函数中执行此操作时:

player1 = new Character(50, 300, linep1);

错误:

mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: __cdecl Character::Character(int,int,class QLine *)" (??0Character@@QEAA@HHPEAVQLine@@@Z) 引用在函数 "public: void __cdecl MainWindow::setUpPlayers(void)" (?setUpPlayers@MainWindow@@QEAAXXZ)

我的角色头文件如下所示:

#include <QLine>

class Character
{
public:
Character(int xCoor, int yCoor, QLine *line);

QLine getView();
int getX();
int getY();
int getScore();

private:
QLine *view;
const int x;
int y;
int score;

};

我的 cpp 文件的上半部分如下所示:

#include "character.h"

Character::Character(int xCoor, int yCoor, QLine *line)
{
    score = 0;
    x = xCoor;
    y = yCoor;
    view = line;
}

如您所见,我目前也在使用 Qt。 谁能帮我解决这个问题?非常感激!

【问题讨论】:

  • 作为记录,您真的应该避免在标题中包含标题。如果需要,只需在标题中使用前向声明。我指的是QLine 类。在Class Character 上方,您可以输入Class QLine;,然后将包含移动到cpp 文件中。
  • 您可以编辑您的帖子以包含确切的错误文本吗?
  • 刚刚包含完整的错误!
  • @Cyber​​:可以包含 QLine。它不会在版本等之间发生变化,因此开销不大。我个人宁愿删除指针以使算术更简单。

标签: c++ windows qt linker qmake


【解决方案1】:

未解析的外部符号是指项目之外的东西,因此是对外部库之类的东西的引用。首先,仔细检查以确保所有项目都可以找到相关文件(QLine)。通常这是导致该错误的原因。然后我会这样声明对象 character player1(50, 300, line1);

【讨论】:

  • 如何检查项目是否可以找到相关文件?我刚刚尝试删除与 QLine 相关的所有内容,但它仍然给了我同样的错误,现在只显示 Character::Character(int,int)
  • 通常这很简单,比如将 .dll 放在项目目录中,并更改链接器和依赖项属性。在这种情况下,它似乎是对您的 Character 类的引用,在这种情况下,我会仔细检查包含语句和对象初始化。
【解决方案2】:

在 c/c++ 中创建可执行程序是一个两阶段的过程。第一阶段涉及将每个源文件 (cpp) 编译成目标代码。第二阶段涉及将所有目标文件与任何其他库一起链接到最终的可执行文件中。

每当您看到“未解析符号”错误时,就意味着您已成功完成编译阶段并且您的所有源文件都已正确编译。出现错误是因为链接器已经通过了您的所有源文件以及您提到的任何额外库,并且它找不到您在某个地方的另一个文件中使用的某些代码或变量。

现在,错误提示找不到您的类Character 的构造函数的代码。既然是你自己写的类,建议你的项目文件不完整。

检查 character.cpp 文件是否包含在 SOURCES 列表中,然后再次运行 qmake。

【讨论】:

    【解决方案3】:

    你很可能在你的 qmake 项目文件中缺少这个:

    SOURCES += character.cpp
    

    如果您使用的是 QtCreator,请确保重新运行 qmake。否则,只需从命令行重新运行它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2011-09-03
      • 2010-11-20
      • 1970-01-01
      • 2010-10-25
      • 2019-10-30
      • 2023-03-05
      相关资源
      最近更新 更多