在下面我的编译器说找不到我的派生类构造函数:
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”创建一个默认构造函数,它会在第一件事时立即调用基类构造函数。
编辑:我的困惑被清除了,感谢您的帮助。我对编译器生成的构造函数的天真解释的解释在一个答案中。
最佳答案
解决办法是写
struct Drink
{
Drink() = default;
Drink(const Drink& other);
};
复制构造函数的存在避免了默认构造函数的自动生成(如您所知)。但这也意味着编译器无法为 PepsiMax
生成 PepsiMax myPepsi;
所依赖的默认构造函数。您需要重新引入它。
关于c++ - 为什么我的派生类构造函数被删除了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41279161/