Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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
Qt 如何重载构造函数_Qt_Constructor_Overloading - Fatal编程技术网

Qt 如何重载构造函数

Qt 如何重载构造函数,qt,constructor,overloading,Qt,Constructor,Overloading,我加载了一个QWidget构造函数,如下所示: LCDRange* range1 = new LCDRange(this, "Text 1"); LCDRange* range2 = new LCDRange(this); .h文件: public: LCDRange(QWidget* parent = 0); LCDRange(QWidget* parent = 0, const char* text = 0); .cpp文件: LCDRange::LCDRange(QW

我加载了一个QWidget构造函数,如下所示:

LCDRange* range1 = new LCDRange(this, "Text 1");
LCDRange* range2 = new LCDRange(this);
.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...
}
或者像这样:

LCDRange* range1 = new LCDRange(this, "Text 1");
LCDRange* range2 = new LCDRange(this);
问题是第二个(范围2)根本不起作用。 编译器抱怨:

main.cpp:26:错误:重载“LCDRange(MyWidget*const)”的调用不明确
LCDRange*range2=新的LCDRange(本);
候选人包括:
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);
另一种是典型的qt样式,有两个构造函数:

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

现在,您有了一个默认构造函数和一个用于
const char*text
的专用构造函数。此外,我添加了
explicit
,以防止编译器进行隐式转换。您可以阅读更多信息。

第三个构造函数是自动创建的副本构造函数请同时显示构造函数定义。。.h文件定义您的意思是有两种解决方案:删除第一个构造函数或更改参数顺序。