error C2512: “MainWidget”: 没有合适的默认构造函数可用

14334阅读 0评论2012-09-17 baifengxian
分类:C/C++

error C2512:“MainWidget”:没有合适的默认构造函数可用
 
    开发环境:VS2010+Qt4.8 Addin。在VS中开发Qt程序。
    VS新建Qt Gui程序总是会带有默认的ui文件,而这个在我开始自己写Qt程序的UI布局时基本就没用了。我需要建立自己的主窗体替代VS自动生成的主窗体类。
    我的做法如下:
    1、在“添加类”界面选择“Qt4Class”,进入新建Qt4Class向导界面;
    2、输入“Class name”;
    3、将“Base class”改为QWidget,如果需要的话;
    4、选择“Constructor signature”为“QWidget * parent”;
    5、在“main.cpp”文件中包含主窗体头文件“MainWidget.h”,并添加如下代码:
int main(int argc, char *argv[])
{
     QApplication a(argc, argv);
     MainWidget w;
     w.show();
     return a.exec();
}
    至此,基本程序框架已经完成,可以编译运行,但编译会出现如下错误:
“error C2512: “MainWidget”: 没有合适的默认构造函数可用”
    原因在于:我们在main()函数中声明了一个MainWidget类的对象,并未给其传递参数,而我们在创建MainWidget类时选择了参数“QWidget * parent”。应该晓得,C++类会自动生成一个无参数的默认构造函数,但前提是没有其他构造函数。在这里我们已经有了一个带参数的构造函数,所以默认构造函数就不会自动生成,故此出现编译错误。
    解决办法:
    方法一、给MainWidget手动添加一个无参数的构造函数;
    方法二、直接在类声明文件“MainWidget.h”中给自动生成的有参数构造函数一个默认参数0,“MainWidget(QWidget *parent = 0);”这样不仅解决了编译错误,而且不用另外添加一个无参数构造函数。这一点是C++的知识,可以参见《C++ Primer》
 
上一篇:【实例】Qt创建文件浏览器
下一篇:Qt之XML(一)