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

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

相关推荐
初願致夕霞14 分钟前
Linux_进程
linux·c++
Thera7771 小时前
【Linux C++】彻底解决僵尸进程:waitpid(WNOHANG) 与 SA_NOCLDWAIT
linux·服务器·c++
Wei&Yan1 小时前
数据结构——顺序表(静/动态代码实现)
数据结构·c++·算法·visual studio code
wregjru1 小时前
【QT】4.QWidget控件(2)
c++
浅念-1 小时前
C++入门(2)
开发语言·c++·经验分享·笔记·学习
小羊不会打字1 小时前
CANN 生态中的跨框架兼容桥梁:`onnx-adapter` 项目实现无缝模型迁移
c++·深度学习
Max_uuc1 小时前
【C++ 硬核】打破嵌入式 STL 禁忌:利用 std::pmr 在“栈”上运行 std::vector
开发语言·jvm·c++
近津薪荼1 小时前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先
艾莉丝努力练剑2 小时前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
Once_day2 小时前
C++之《程序员自我修养》读书总结(1)
c语言·开发语言·c++·程序员自我修养