亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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條經驗 獲得超8個贊

因為如果你要定義一個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 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號