Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt";“调用”没有匹配的函数;_C++_Qt_Compiler Errors - Fatal编程技术网

C++ Qt";“调用”没有匹配的函数;

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;

我有

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

存储行类定义:

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;
};