首页 > 解决方案 > 无法调用构造函数

问题描述

我有一个看起来像这样的构造函数:

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

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

标签: c++qtconstructor

解决方案


您使用错误的默认参数。正如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)) {....}


注意:经过更多研究,您似乎可以将其放入其中之一,但特别是,如果您将实现放在不同的文件中,您将遇到此类问题


推荐阅读