编译时提示存在多个默认构造函数的错误怎么解决呢?

c++程序中,如果编译器提升存在多个默认构造函数怎么解决呢?

c# 复制代码
class Date
{
public:
 Date()
 {
 _year = 1900;
 _month = 1;
 _day = 1;
 }
 Date(int year = 1900, int month = 1, int day = 1)
 {
 _year = year;
 _month = month;
 _day = day;
 }
private:
 int _year;
 int _month;
 int _day;
};
// 以下测试函数能通过编译吗?
void Test()
{
 Date d1;
}
//调用时存在歧义,因为第二个构造函数时函数重载,

原因:

无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为 是默认构造函数,并且默认构造函数只能有一个。

上面的代码中存在两个构造函数,当你创建对象d1的时候,编译器调用构造函数,原本是应该调用第一个构造函数的,当时构造函数可以重载,第二个构造函数是全缺省的,即使你不写任何参数都有缺省参数,所以编译器无判断你用第一个构造函数还是第二个构造函数,所以你要解决就只能修改第二个构造函数,修改缺省值,使其不存在调用分歧。

相关推荐
水饺编程3 小时前
第5章,[Win32 章节] :绘图模式
c语言·c++·windows·visual studio
INGNIGHT3 小时前
1908 · 布尔表达式求值(stack单调栈&dfs)
开发语言·c++·算法
小小杨树4 小时前
【C++】学习:双缓冲视频流水线深解析
c++·性能优化·音视频开发
青少儿编程课堂5 小时前
图形化编程实战:智能交通灯调度台,一个作品讲透循环、条件与广播
c++·python·算法·bfs·信息学竞赛
赵民勇5 小时前
C++无锁编程详解
c++
醉颜凉5 小时前
C++ 中野指针与悬挂指针的区别:从成因到防范,彻底讲清两种危险指针
c++
Demon--hx5 小时前
设计不能被继承的类
开发语言·c++
兔兔兔兔15 小时前
记录C++ 13
开发语言·c++·算法
开心大爆炸6 小时前
ubuntu20.4 安装ros1 noetic版本流程
c++
欧特克_Glodon9 小时前
OpenCV计算机视觉开发入门与实践<二十四>:几何变换之平移、缩放、旋转
c++·人工智能·opencv·计算机视觉