【发布时间】:2016-12-22 08:54:54
【问题描述】:
在下面我的编译器说找不到我的派生类构造函数:
struct Drink
{
Drink(const Drink& other);
};
struct PepsiMax : Drink {};
int main()
{
PepsiMax myPepsi; // <--- the default constructor of PepsiMax cannot be referenced, it is a deleted function
}
我知道需要定义 Drink 的默认构造函数,因为我创建了一个复制构造函数,编译器不会为我创建默认构造函数。但是,错误消息说它找不到我的 PepsiMax 类的默认构造函数,我希望它会生成它。如果我为 PepsiMax 定义默认构造函数,它会显示一个错误,指出它找不到 Drink 默认构造函数,这正是我所期望的。
我可以假设它指的是“Drink”而不是“PepsiMax”的默认构造函数,还是我误解了什么?我希望编译器为“PepsiMax”创建一个默认构造函数,它首先会立即调用基类构造函数。
编辑:我的困惑已经解决,感谢您的帮助。我对编译器生成的构造函数的天真解释的解释在答案中。
【问题讨论】:
-
这是因为Drink没有默认构造函数,只有你刚刚指定的复制构造函数Drink::Drink(const Drink &)。如果需要默认构造函数,请在结构 Drink 中添加 Drink() 或在结构 PepsiMax 中添加 PepsiMax()。
标签: c++ constructor copy default