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

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

相关推荐
青少儿编程课堂4 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会C/C++考级:并查集连通块与朋友圈问题解析
c++·python·算法·bfs·信息学竞赛
wyhwust4 小时前
codeblocks程序调试
c++
傲世仙尊4 小时前
运算符重载-operator函数与五个不能重载的符号
c++
傲世仙尊5 小时前
赋值运算符重载-从无到有与从有到有六大函数收官
c++
晴天的雨.9925 小时前
【C++】模板进阶
开发语言·c++·算法
Shadow(⊙o⊙)5 小时前
仿muduo实现高并发服务器——时间轮timewheel.cpp
c语言·c++
WL学习笔记17 小时前
C & C++ 内存管理
c++·c++内存管理
宛 禾20 小时前
Qt 控件入门:QLabel 从拖拽到对象树,一篇讲透
c++·qt·学习
hetao173383720 小时前
联盟场-提高组-R7 & ZYZSC-S-Round 11
c++·算法
程序喵大人20 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器