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

定义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++远征之封装篇(下)
  • 参与学习       70918    人
  • 解答问题       514    个

封装--面向对象三大特征之一,通过案例让C++所学知识融会贯通

进入课程

定义Line的构造函数时,为什么不可以写成如下形式呢?(编译error C2512: “Coordinate”: 没有合适的默认构造函数可用)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信