定义多个默认构造函数问题

jiasi888 2012-05-20 02:30:52

#ifndef MATRIX_H_
#define MATRIX_H_
class MyMatrix
{
private:
int row;
int lin;
int** pm;
void init();
public:
MyMatrix();
MyMatrix(int r=0,int l=0);

函数定义

MyMatrix::MyMatrix()
{
row=lin=0;
}
MyMatrix::MyMatrix(int r,int l)
{
row=r;
lin=l;
init();
}

使用:
	MyMatrix A;
MyMatrix B(3,4);


有一个警告 定义多个默认构造函数
一个错误:对重载函数的调用不明确

为什么?初学C++,照着Primer Plus一段程序做的。同样是两个构造函数,为什么我的错了
...全文
1092 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiasi888 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

MyMatrix(int r=0,int l=0);

意思是:不给参数的话用后面的默认值代替

所以你下面的这句: MyMatrix A 会认系统分不清是调用无参的还是调用A(0,0)

其实你的MyMatrix(int r=0,int l=0);就已经包含了MyMatrix()
所以直接把无参的构造函数去掉就解决了
[/Quote]抱歉了,结贴时漏过去了
pathuang68 2012-05-20
  • 打赏
  • 举报
回复
错误的原因是MyMatrix A;这句造成的。因为MyMatrix();和 MyMatrix(int r=0,int l=0);这两个构造函数都满足调用条件,编译器不知道应该选择哪一个,故而告警。
paschen 版主 2012-05-20
  • 打赏
  • 举报
回复
MyMatrix(int r=0,int l=0);

意思是:不给参数的话用后面的默认值代替

所以你下面的这句: MyMatrix A 会认系统分不清是调用无参的还是调用A(0,0)

其实你的MyMatrix(int r=0,int l=0);就已经包含了MyMatrix()
所以直接把无参的构造函数去掉就解决了
avrilers 2012-05-20
  • 打赏
  • 举报
回复
MyMatrix(int r=0,int l=0);

这是什么意思
youkuxiaobin 2012-05-20
  • 打赏
  • 举报
回复
这个肯定会出问题的,调用没有参数的构造函数,编译器不知道链接哪个
pch002 2012-05-20
  • 打赏
  • 举报
回复
当调用 MyMatrix()时选择哪个构造函数是没法确定的。
W170532934 2012-05-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

不能这么弄 要不然你使用无参数构造函数的时候 鬼晓得你要用哪一个啊 是本来就无参数的 还是采用默认参数的?
[/Quote]
+++
菜头叔 2012-05-20
  • 打赏
  • 举报
回复
因为你后面一个带参数的构造函数里的参数都是默认参数,调用时可有可无,所以编译器就有歧义了!
無_1024 2012-05-20
  • 打赏
  • 举报
回复
不能这么弄 要不然你使用无参数构造函数的时候 鬼晓得你要用哪一个啊 是本来就无参数的 还是采用默认参数的?

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧