繁体   English   中英

Qt“呼叫没有匹配功能”

[英]Qt “no matching function for call”

我有

no matching function for call to 'saveLine::saveLine()'

编译我的应用程序时出错。 实际上从未调用过该构造函数。

saveLine类定义:

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

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

class MWindow : public QWidget
{
    Q_OBJECT
public:
    MWindow(QWidget *parent=0);
private:
    saveLine line1;
};

错误指向MWindow构造函数实现

MWindow::MWindow(QWidget *parent):QWidget(parent)
{
    this->setWindowTitle("Launcher");
    this->resize(600,600);
}

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

编辑:我错误地声明了line1,它应该显示为

saveLine *line1;

但是现在它又给出了另一个错误

ISO C++ forbids declaration of 'saveLine' with no type

expected ';' before '*' token

在这条线上。 似乎saveLine不再被视为类,怎么回事?

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

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

MWindow::MWindow(QWidget *parent)
    : QWidget(parent), line1(parent)
{
    //...
}

(我假设父指针是您要传递的指针;如果您需要给它其他东西,那么请给它它所需要的东西)

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

saveLine(QWidget *parent = 0);

这将允许不带任何参数调用该构造函数(并使它成为默认构造函数)。 这是否有意义取决于父指针是否确实是可选的。 显然,如果这样做,则在取消引用和使用指针之前,需要检查以确保指针不为null。

您必须在MWindow的构造函数中调用saveLine的构造函数,以为其提供所需的父对象。

采用:

MWindow::MWindow(QWidget *parent) : QWidget(parent), line1(parent)
{
    this->setWindowTitle("Launcher");
    this->resize(600,600);
}

但是现在它又给出了另一个错误

ISO C ++禁止声明无类型的“ saveLine”

您需要添加一个前向声明,以告知编译器saveLine类存在:

像这样:

//declare that there will be a class saveLine
class saveLine;

class MWindow : public QWidget
{
    Q_OBJECT
public:
    MWindow(QWidget *parent=0);
private:
    saveLine *line1;
};

您在类声明中声明了saveLine的实例,而不是指向saveLine的指针。

您可以将MWindow中的引用更改为

saveLine* line1;

要么

您可以这样实现:

MWindow::MWindow(QWidget *parent):QWidget(parent), line1(parent)
{
    this->setWindowTitle("Launcher");
    this->resize(600,600);
}

尝试添加class saveLine; class MWindow线的上方。 当saveLine类和MWindow类的.h文件相互包含(直接或间接)时,通常会发生这种情况。 例如,请参阅http://www.allegro.cc/forums/thread/594307的前几篇文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM