定義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;
}
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;
}
2017-12-09
舉報
2017-12-10
實例化Line對象時,先實例化Coordinate對象點A和點B,實例化點A和點B時,會自動調用構造函數,程序中如果只有構造函數Coordinate(int x,int y)時,調用時必須傳遞參數,否則會報錯。但如果加上默認構造函數Coordinate()時,沒有參數傳遞時就會調用Coordinate()這個函數,就不會報錯了。
2017-12-11
m_coorA沒有實例化怎么就直接給m_coorA的屬性賦值了?
2017-12-09
兩種方法可以解決:①“把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),不傳遞參數會出錯,可以寫一個無參構造函數,這樣你的程序就能運行了。