我这样加载了QWidget构造函数:

.h文件:

public:
    LCDRange(QWidget* parent = 0);
    LCDRange(QWidget* parent = 0, const char* text = 0);

.cpp文件:
LCDRange::LCDRange(QWidget* parent): QWidget(parent){
    init();
    std::cout << "constr 1 called" <<std::endl;
}


LCDRange::LCDRange(QWidget* parent, const char* text): QWidget(parent){
    init();
    setText(text);
    std::cout << "constr 2 called" <<std::endl;
}

    void LCDRange::init(){
//code...
}

然后,在我的main()函数中,我像这样调用构造函数:
LCDRange* range1 = new LCDRange(this, "Text 1");

或像这样:
LCDRange* range2 = new LCDRange(this);

问题是第二个(范围2)根本不起作用。
编译器抱怨:

main.cpp:26:错误:重载的“LCDRange(MyWidget * const)”的调用不明确
LCDRange * range2 =新的LCDRange(this);
候选人是:
LCDRange::LCDRange(QWidget *,const char *)
LCDRange::LCDRange(QWidget *)
LCDRange::LCDRange(const LCDRange&)


我不明白第三个构造函数出现在哪里...
为什么在以下内容中显示“const”:

重载的'LCDRange(MyWidget * const)

最佳答案

它们是模棱两可的,因为两者都可以不带参数地使用,然后

public:
    LCDRange();
    LCDRange();

您可以删除第一个构造函数,然后使用
public:
    LCDRange(QWidget* parent = 0, const char* text = 0);

另一种选择是具有2个构造函数的典型qt样式:
public:
    explicit LCDRange(QWidget* parent = 0);
    explicit LCDRange(const char* text, QWidget* parent = 0);

现在,您有了一个默认的构造函数,还有一个专门的const char* text构造函数。此外,我添加了explicit以防止编译器进行隐式转换。您可以在cppreference.com上阅读更多内容。

09-11 12:08