我有一个带有默认构造函数的类,以及一个带有8个参数的构造函数。
从另一个类我试图调用构造函数并传递8个参数但是当我尝试这样做时,我得到一个LNK2019 Error
。
令我困惑的是,如果我调用默认构造函数,程序编译并运行正常...一切都有正确的包含,必须正常工作,因为我可以调用默认构造函数,我使用QStrings作为一些参数,但QString被包括在内,所以它不能...任何其他原因任何人都知道我为什么我会geta LNK2019 error
一个构造函数接受参数而不是它的默认值?
Car.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);
};
car.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)
{
}
显然我刚刚删除了上下文和值等,但结构上没有任何区别
DatabaseController.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)
答案 0 :(得分:11)
我知道这是一个非常晚的回应,但我在同样的问题上挣扎了很长时间。
在执行clean-&gt; rebuild时,QT并不总是正确解析c ++文件。幸运的是,强制它只是手动删除构建文件,它将从头开始运行。
它对我有用,我希望它可以帮助一些人!
答案 1 :(得分:2)
您是否尝试过重建项目?在某些情况下,这确实会产生类似于您描述的链接错误。
好的,你可以复制粘贴你项目中的相同代码吗? :)
car *car = new car(0, "", "", "", 0, 0, 0, "");
例如,在这里,您不能将具有相同名称的“car”实例命名为。您应该使用其他标识符,例如:
car *pCar = new car(0, "", "", "", 0, 0, 0, "");
答案 2 :(得分:1)
我遇到了同样的问题,没有一个建议的答案对我有用。最终运行qmake 为我做了诀窍。
我认为这可能会帮助那些面临类似问题的人。