6

[已解决]这个问题不知何故在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, "");
}

接口.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)
4

3 回答 3

11

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

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

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

于 2014-11-27T17:10:02.453 回答
2

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

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

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

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

car *pCar = new car(0, "", "", "", 0, 0, 0, "");
于 2013-04-12T11:31:36.507 回答
1

我面临着同样的问题,没有一个建议的答案对我有用。最终运行 qmake为我解决了问题。

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

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

于 2017-12-15T15:22:15.873 回答