gpt4 book ai didi

c++ - 为什么我的派生类构造函数被删除了?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:12 25 4
gpt4 key购买 nike

在下面我的编译器说找不到我的派生类构造函数:

    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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com