C++: error: call of overloaded 'Data(int, int)' is ambiguous

C++: error: call of overloaded ‘Data(int, int)’ is ambiguous

习题 3.3 如果将第2题中程序的第4行改为用默认参数,即Date(int=1, int=1, int=2005); 分析程序有无问题。要求保留上面一行给出的构造函数,同时能输出与第2题的程序。

1、改正的代码如下:

#include<iostream>
using namespace std;
class Data
{public:
	Data(int =1,int =1,int =2005);
	//Data(int,int);
	//Data(int);
	//Data();
	void display();
private:
	int mouth;
	int year;
	int day; 
};
Data::Data(int m,int d,int y):mouth(m),day(d),year(y){}
//Data::Data(int m,int d):mouth(m),day(d){year=2005;}
//Data::Data(int m):mouth(m){day=1;year=2005;}
//Data::Data(){mouth=1;day=1;year=2005;}
void Data::display()
{cout<<mouth<<"/"<<day<<"/"<<year<<endl;}
int main()
{Data d1(10,13,2005);
	Data d2(12,30);
	Data d3(10);
	Data d4;
	d1.display();
	d2.display();
	d3.display();
	d4.display();
	return 0;
};

如果我们换一种颜色你可能会觉得舒服一点。

#include<iostream>
using namespace std;
class Data
{public:
	Data(int =1,int =1,int =2005);
	//Data(int,int);
	//Data(int);
	//Data();
	void display();
private:
	int mouth;
	int year;
	int day; 
};
Data::Data(int m,int d,int y):mouth(m),day(d),year(y){}
//Data::Data(int m,int d):mouth(m),day(d){year=2005;}
//Data::Data(int m):mouth(m){day=1;year=2005;}
//Data::Data(){mouth=1;day=1;year=2005;}
void Data::display()
{cout<<mouth<<"/"<<day<<"/"<<year<<endl;}
int main()
{Data d1(10,13,2005);
	Data d2(12,30);
	Data d3(10);
	Data d4;
	d1.display();
	d2.display();
	d3.display();
	d4.display();
	return 0;
}

我建议你可以看一下前面的内容,在使用默认参数的构造函数这一章有讲的。

默认参数的作用相当于好几个构造函数,因此在一个类中定义了全部是默认参数的构造函数后,不可以再定义重造构造函数,避免二义性。
发布了8 篇原创文章 · 获赞 8 · 访问量 860

猜你喜欢

转载自blog.csdn.net/weixin_44858357/article/details/103446532
int