Qt"没有匹配的呼叫功能"

Bli*_*lin 0 c++ qt compiler-errors

我有

no matching function for call to 'saveLine::saveLine()'
Run Code Online (Sandbox Code Playgroud)

编译我的应用程序时出错.实际上从未调用过construcor.

saveLine类定义:

class saveLine
{
public:
    saveLine(QWidget *parent);
private:
    QPushButton *selectButton, *acceptButton;
    QLabel *filePath;
    QLineEdit *allias;
};
Run Code Online (Sandbox Code Playgroud)

saveLine用于另一个类,定义如下:

class MWindow : public QWidget
{
    Q_OBJECT
public:
    MWindow(QWidget *parent=0);
private:
    saveLine line1;
};
Run Code Online (Sandbox Code Playgroud)

错误指向MWindow构造函数实现

MWindow::MWindow(QWidget *parent):QWidget(parent)
{
    this->setWindowTitle("Launcher");
    this->resize(600,600);
}
Run Code Online (Sandbox Code Playgroud)

我该怎么办?我打算在向量中使用saveLine类,以在运行时创建行.

编辑:我错误地宣布了line1,它应该读

saveLine *line1;
Run Code Online (Sandbox Code Playgroud)

但现在又出现了另一个错误

ISO C++ forbids declaration of 'saveLine' with no type
Run Code Online (Sandbox Code Playgroud)

expected ';' before '*' token
Run Code Online (Sandbox Code Playgroud)

在这条线上.似乎saveLine不再被认为是一个类,怎么会这样?

Jam*_*lis 5

由于您为类提供了用户声明的构造saveLine函数,因此编译器不提供默认构造函数.您的构造函数不是默认构造函数(它有一个必需参数),因此您无法默认构造类型的对象saveLine.

由于类中有saveLine对象MWindow,因此需要在MWindow构造函数的初始化列表中使用构造函数对其进行初始化:

MWindow::MWindow(QWidget *parent)
    : QWidget(parent), line1(parent)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

(我假设父指针是你要传递的那个;如果你需要给它别的东西,那就给它需要的东西)

另一个选择是为saveLine构造函数中的参数提供一个默认参数:

saveLine(QWidget *parent = 0);
Run Code Online (Sandbox Code Playgroud)

这将允许在没有参数的情况下调用构造函数(并使其成为默认构造函数).这是否有意义取决于父指针是否真的是可选的.显然,如果你这样做,你需要在取消引用并使用它之前检查以确保指针不为空.