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

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

相关推荐
tt5555555555559 分钟前
字符串与算法题详解:最长回文子串、IP 地址转换、字符串排序、蛇形矩阵与字符串加密
c++·算法·矩阵
rainFFrain1 小时前
Boost搜索引擎项目(详细思路版)
网络·c++·http·搜索引擎
long_run2 小时前
C++之模板函数
c++
NuyoahC2 小时前
笔试——Day43
c++·算法·笔试
彷徨而立3 小时前
【C++】 using声明 与 using指示
开发语言·c++
一只鲲3 小时前
48 C++ STL模板库17-容器9-关联容器-映射(map)多重映射(multimap)
开发语言·c++
智践行4 小时前
C++11 智能指针:`std::unique_ptr`、`std::shared_ptr`和`std::weak_ptr`
c++
智践行4 小时前
C++11之后的 Lambda 表达式 以及 `std::function`和`std::bind`
c++
智践行4 小时前
C++11移动语义‘偷梁换柱’实战
c++
祁同伟.5 小时前
【C++】模版(初阶)
c++