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

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的时候,编译器调用构造函数,原本是应该调用第一个构造函数的,当时构造函数可以重载,第二个构造函数是全缺省的,即使你不写任何参数都有缺省参数,所以编译器无判断你用第一个构造函数还是第二个构造函数,所以你要解决就只能修改第二个构造函数,修改缺省值,使其不存在调用分歧。

相关推荐
汉克老师6 小时前
GESP6级C++考试语法知识(四、图与树(四))
c++·贪心算法·优先队列·哈夫曼编码·哈夫曼树·gesp6级·gesp六级
子兮曰7 小时前
whisper.cpp 深度解析:从边缘设备到实时语音识别
前端·c++·后端
特种加菲猫7 小时前
二叉搜索树:数据世界的“快速寻路指南”
开发语言·c++
naturerun7 小时前
从数组中删除元素的算法
数据结构·c++·算法
特种加菲猫7 小时前
STL关联容器:Set/Multiset与Map/Multimap详解
开发语言·c++
Andy7 小时前
C++ list容器基本逻辑结构详解
c++·windows·list
想唱rap8 小时前
传输层协议TCP
linux·运维·服务器·网络·c++·tcp/ip
瑶池酒剑仙9 小时前
C++类和对象完全指南:从封装继承多态到内存布局的面向对象宝典(雨夜论道)
c语言·开发语言·c++·visual studio
潇湘散客9 小时前
CAX软件插件化设计实现牛刀小试
c++·算法·图形学·opengl
Ricky_Theseus9 小时前
const 和 #define 的区别
c++