无法调用构造函数

inability to call the constructor

本文关键字:构造函数 调用      更新时间:2023-10-16

我有一个构造函数,如下所示:

scacfg(const QString &caption, QWidget *parent);
scacfg::scacfg(const QString &caption = "Click Me", QWidget *parent = nullptr) : QWidget(parent)
checkBox(new QCheckBox("Enabled")),
button(new QPushButton(caption)) {....}

我试着这样称呼它:

QStringList groups = sttngs->childGroups();
foreach (const QString grp, groups) {
scacfg *config = new scacfg(grp);

但是编译器抱怨错误:没有匹配函数来调用'scacfg::scacfg(const QString&('scacfg *config = new scacfg(grp);

我不确定为什么这是原型中提供的默认值。如果有人能解释一下,我如何最好地解决这个问题,那将不胜感激!

您使用默认参数是错误的。正如Geeks for Geeks所说(强调我的(:

默认参数是函数声明中提供的值,如果函数的调用方未为具有默认值的参数提供值,则编译器会自动分配该值。

换句话说,您的默认部分位于错误的位置。试试这个:

scacfg(const QString &caption = "Click Me", QWidget *parent = nullptr);
scacfg::scacfg(const QString &caption, QWidget *parent) : QWidget(parent)
checkBox(new QCheckBox("Enabled")),
button(new QPushButton(caption)) {....}

注意:在进行了更多研究之后,似乎您实际上可以将其放入其中任何一个,但是特别是,如果您将实现放在不同的文件中,则会遇到此类问题。