为了账号安全,请及时绑定邮箱和手机立即绑定

error C2512: 'person' ?该怎么修改?

error C2512: 'person' ?该怎么修改?

狐的传说 2022-08-10 18:14:31
#include<iostream>using namespace std;class person{public :person(char* n){name = n;}void print(){cout<<name<<endl;}private:char *name;};class police:public person{public :police(char* n, char* m ):ps(n), major(m){cout<<"police called"<<endl;}void print(){person::print();cout<<major<<endl;}private:person ps;char* major;};void main(){police economical("renchangxia", "economical");economical.print();}1>c:\documents and settings\administrator\my documents\visual studio 2005\projects\first\first\extends.cpp(30) : error C2512: 'person' : no appropriate default constructor available书本上有个程序是这样的 :类M的构造函数 M(int i, int j){------}无默认构造函数,但是在M的扩展类中中存在 M mm,不是M mm(int, int);编译运行均没有问题~我提供的程序中,对象ps的初始化时在 police构造函数police(char* n, char* m ):ps(n), major(m){----} 时进行的~ 
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

因为如果你要定义一个person,假如像这样定义.
person p1;
那么p1就会调用person的默认构造函数进行初始化.如果你没有当然会报错.

也就是说,如果你没有默认构造函数,就不能像上面那样定义一个类的实例.
我是这样认为.

像你的这个person类可以这样定义一个实例,也仅能这样.
person p1("zs");

根据上面说的,你的代码如下:
private:
person ps;
char* major;
是不对的.明白否?

查看完整回答
反对 回复 2022-08-15
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

当没有构造函数时,类提供一个默认的无参构造函数.当有了自定义的构造函数时.类就不会再提供无参构造函数.也就是当构造police时,运行到上面那句,需到person里面去找无参构造函数,对ps初始化,而你的person类里没有.所以会产生错误.解决的方法有两种:
1.在person里面加一个无参构造函数.
2.声明person ps("none")

查看完整回答
反对 回复 2022-08-15
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

把police里面的person ps;注释掉,
再把police(char *n, char *m ):ps(n), major(m)改成police(char *n, char *m ):person(n), major(m)

查看完整回答
反对 回复 2022-08-15
  • 3 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号