C++ Qt";“调用”没有匹配的函数;
我有 编译我的应用程序时出错。construcor从未实际调用过 存储行类定义:C++ Qt";“调用”没有匹配的函数;,c++,qt,compiler-errors,C++,Qt,Compiler Errors,我有 编译我的应用程序时出错。construcor从未实际调用过 存储行类定义: no matching function for call to 'saveLine::saveLine()' 保存行用于另一个类,定义如下: class saveLine { public: saveLine(QWidget *parent); private: QPushButton *selectButton, *acceptButton; QLabel *filePath;
no matching function for call to 'saveLine::saveLine()'
保存行用于另一个类,定义如下:
class saveLine
{
public:
saveLine(QWidget *parent);
private:
QPushButton *selectButton, *acceptButton;
QLabel *filePath;
QLineEdit *allias;
};
MWindow构造函数实现的错误点
class MWindow : public QWidget
{
Q_OBJECT
public:
MWindow(QWidget *parent=0);
private:
saveLine line1;
};
我该怎么办?我打算在向量中使用saveLine类,以便在运行时创建行
编辑:我错误地声明了第1行,应该是
MWindow::MWindow(QWidget *parent):QWidget(parent)
{
this->setWindowTitle("Launcher");
this->resize(600,600);
}
但现在它给出了另一个错误
saveLine *line1;
及
在这条线上。似乎存储行不再被视为类,这是怎么回事?因为您为类
存储行
提供了用户声明的构造函数,所以编译器不提供默认构造函数。您的构造函数不是默认构造函数(它有一个必需的参数),因此您不能默认构造类型为saveLine
的对象
由于在MWindow
类中有一个saveLine
对象,因此需要使用构造函数在MWindow
构造函数的初始值设定项列表中对其进行初始化:
expected ';' before '*' token
(我假设父指针是您要传递的指针;如果您需要为它提供其他内容,请提供它所需的内容)
另一个选项是为saveLine
的构造函数中的参数提供默认参数:
MWindow::MWindow(QWidget *parent)
: QWidget(parent), line1(parent)
{
//...
}
这将允许无参数调用该构造函数(并使其成为默认构造函数)。这样做是否有意义取决于父指针是否真的是可选的。显然,如果这样做,在取消引用并使用它之前,您需要检查指针是否为null。您必须在MWindow的构造函数中调用saveLine的构造函数,为其提供所需的父级 使用:
您在类声明中声明的是存储行实例,而不是指向存储行的指针 您可以将mWindows中的引用更改为
MWindow::MWindow(QWidget *parent) : QWidget(parent), line1(parent)
{
this->setWindowTitle("Launcher");
this->resize(600,600);
}
或
您可以这样实现:
saveLine* line1;
但现在它给出了另一个错误
saveLine *line1;
ISO-C++禁止声明 没有类型的“保存行”
您需要添加一个转发声明来告诉编译器存储行类存在: 像这样:MWindow::MWindow(QWidget *parent):QWidget(parent), line1(parent)
{
this->setWindowTitle("Launcher");
this->resize(600,600);
}
尝试添加
类存储行代码>就在class MWindow
行上方。当saveLine类和MWindow类的.h文件相互包含(直接或间接)时,通常会发生这种情况。例如,看的前几篇文章,这是为了什么?我也想知道,我确实忘记使用指针了。ALTUUG编译器现在有不同的错误:“ISO C++禁止声明“Savelin”没有“类型”和“预期”;“在”*之前“令牌”也许你丢失了你的“包含”指令,不,它正是它应该在哪里。次要NIT:你应该通过<代码>这个< /C> >而不是<代码>父< /代码>到<代码> LIL1()。
。好的一点-除了重载构造函数之外,还要指定自己的默认构造函数。
MWindow::MWindow(QWidget *parent):QWidget(parent), line1(parent)
{
this->setWindowTitle("Launcher");
this->resize(600,600);
}
//declare that there will be a class saveLine
class saveLine;
class MWindow : public QWidget
{
Q_OBJECT
public:
MWindow(QWidget *parent=0);
private:
saveLine *line1;
};