我开发了像这样的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:错误:调用重载&#39; LCDRange(MyWidget * const)&#39;很暧昧
LCDRange * range2 =新的LCDRange(这个);
候选人是:
LCDRange :: LCDRange(QWidget *,const char *)
LCDRange类:: LCDRange类(QWidget的*)
LCDRange :: LCDRange(const LCDRange&amp;)
我不明白第三个构造函数出现在哪里...... 为什么这么说&#34; const&#34;在:
重载&#39; LCDRange(MyWidget * const)
答案 0 :(得分:5)
它们含糊不清,因为两者都可以在没有参数的情况下使用,然后你有
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上阅读更多内容。