Chinaunix首页 | 论坛 | 博客
  • 博客访问: 920470
  • 博文数量: 40
  • 博客积分: 995
  • 博客等级: 准尉
  • 技术积分: 830
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-10 11:09
个人简介

不知道自己是码农的二流码农!

文章分类

全部博文(40)

文章存档

2013年(4)

2012年(35)

2011年(1)

分类: C/C++

2012-09-17 10:40:12

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》
 
阅读(14252) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~