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

為了賬號安全,請及時綁定郵箱和手機立即綁定

定義Line的構造函數時,為什么不可以寫成如下形式呢?(編譯error C2512: “Coordinate”: 沒有合適的默認構造函數可用)


Line::Line(int x1,int y1,int x2,int y2)

{

m_coorA.setX(x1);

m_coorA.setY(y1);

m_coorB.setX(x2);

m_coorB.setY(y2);

cout<<"Line()"<<endl;

}


正在回答

3 回答

實例化Line對象時,先實例化Coordinate對象點A和點B,實例化點A和點B時,會自動調用構造函數,程序中如果只有構造函數Coordinate(int x,int y)時,調用時必須傳遞參數,否則會報錯。但如果加上默認構造函數Coordinate()時,沒有參數傳遞時就會調用Coordinate()這個函數,就不會報錯了。

5 回復 有任何疑惑可以回復我~
#1

慕的地8223948 提問者

非常感謝!
2017-12-11 回復 有任何疑惑可以回復我~
#2

路卍飛 回復 慕的地8223948 提問者

不客氣!大家一起學習一起進步!加油!
2017-12-11 回復 有任何疑惑可以回復我~

m_coorA沒有實例化怎么就直接給m_coorA的屬性賦值了?

1 回復 有任何疑惑可以回復我~
#1

慕的地8223948 提問者

啊,明白了
2017-12-11 回復 有任何疑惑可以回復我~

兩種方法可以解決:①“把Line::Line(int x1,int y1,int x2,int y2)”后面接一句“:m_coorA(x1,y1),m_coorB(x2,y2)”; ②在Coordinate.h加一句“Coordinate();”,在Coordinate.cpp中加“Coordinate::Coordinate(){
?cout << "Coordinate()" << endl;}”,都可以運行。原因是,程序中只有有參構造函數Coordinate(int x,int y),不傳遞參數會出錯,可以寫一個無參構造函數,這樣你的程序就能運行了。


3 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之封裝篇(下)
  • 參與學習       70902    人
  • 解答問題       534    個

封裝--面向對象三大特征之一,通過案例讓C++所學知識融會貫通

進入課程

定義Line的構造函數時,為什么不可以寫成如下形式呢?(編譯error C2512: “Coordinate”: 沒有合適的默認構造函數可用)

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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