【问题标题】:C++/Qt unresolved external when calling constructor调用构造函数时 C++/Qt 无法解析外部
【发布时间】:2013-04-04 20:52:51
【问题描述】:

[已解决]这个问题在大约 5-6 次清理和重建时以某种方式自行解决,没有更改任何代码

我有一个带有默认构造函数的类,以及一个带有 8 个参数的构造函数。

我试图从另一个类调用构造函数并传递 8 个参数,但是当我尝试这样做时,我得到一个 LNK2019 Error。

但让我感到困惑的是,如果我调用默认构造函数,程序编译和运行都不会正常...一切都有正确的包含并且必须工作,因为我可以调用默认构造函数,我使用 QStrings 作为一些参数,但 QString 被包括在内,所以不可能是这样......任何其他人都知道为什么我会得到LNK2019 error 的构造函数接受参数而不是当它是默认参数时??

汽车.h

#include <QString>
class car
{
public:

    car();
    car(int car_id, QString something, QString something_else, QString something3, int an_int, int another_int, int another_int_i, QString something4);
};

汽车.cpp

car::car()
{
}

car::car(int car_id, QString something, QString something_else, QString something3, int an_int, int another_int, int another_int_i, QString something4)
{
}

显然我刚刚删除了上下文和值等,但对结构没有影响

数据库控制器.cpp

#include "DatabaseController.h"
#include "car.h"
void DatabaseController::DoSomething()
{
    car *pcar = new car(0, "", "", "", 0, 0, 0, "");
}

interface.cpp

#include "DatabaseController.h"
void interface::on_btn_clicked()
{
    DatabaseController DC;
    DC.DoSomething();
}

完全错误:

DatabaseController.obj:-1: error: LNK2019: unresolved external symbol "public: __thiscall car::car(int,class QString,class QString,class QString,int,int,int,class QString)" (??0car@@QAE@HVQString@@00HHH0@Z) referenced in function "public: void __thiscall DatabaseController::getAll(class QString)" (?getAll@DatabaseController@@QAEXVQString@@@Z)

【问题讨论】:

  • 请显示您的代码(并保持合理的简短):SSCCE。 编辑和完整的错误。
  • 好的,请稍等,我只是想获得一个包含所有必要部分的精简版
  • 链接错误与include无关,即使包含QString,如果没有指定QString的库,也可能会出现链接错误。
  • 你能给我们看看你的.pro文件吗?
  • 你定义汽车了吗()?

标签: c++ qt unresolved-external


【解决方案1】:

我知道这是一个很晚的回应,但我为同样的问题苦苦挣扎了很长时间。

在进行 clean->rebuild 时,QT 并不总是正确解析 c++ 文件。幸运的是,只要手动删除构建文件,它就会从头开始运行。

它对我有用,我希望它可以帮助一些人!

【讨论】:

    【解决方案2】:

    您是否尝试过重建项目?在某些情况下,这确实会产生类似于您描述的链接错误。

    好的,您能否复制粘贴与您项目中相同的代码? :)

    car *car = new car(0, "", "", "", 0, 0, 0, "");
    

    例如,在这里,您不能用相同的名称命名“汽车”的实例。您应该使用另一个标识符,例如:

    car *pCar = new car(0, "", "", "", 0, 0, 0, "");
    

    【讨论】:

    • 好的,现在不用担心尝试解析代码了与汽车等,但它是为了在没有上下文的情况下显示我的代码,并且该错误仅在这里我知道不要将实例命名为与类相同
    • 无论如何,事实证明你是对的,至少比其他任何人都更正确,在清理和重建后自行整理(这没有任何意义,因为 id 做了几次到没有无论如何都不能接受答案)
    • 从侧面看,问题看起来你在构造函数中有很多不同的参数并逐步添加它们,逐步编译代码。根据我的经验,一些编译器不喜欢这样的变化,可能会让你发狂:) 有趣的是,你使用的是什么编译器。
    【解决方案3】:

    我遇到了同样的问题,建议的答案都不适合我。最终运行 qmake 为我解决了问题。

    1. 右键项目名称
    2. 运行 qmake
    3. 干净
    4. 重建

    我认为这可能会对面临类似问题的人有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 2017-02-28
      相关资源
      最近更新 更多