gpt4 book ai didi

c++ - 错误: Cannot synthesize a Constructor for A

转载 作者:行者123 更新时间:2023-12-02 02:21:51 24 4
gpt4 key购买 nike

嗨,我正在尝试了解构造函数在 C++ 中的工作原理。为此,我使用以下示例:

class NoDefault
{
public:
NoDefault (const std::string &){}

};

struct A
{
NoDefault my_mem;
};

struct B
{
B ()
{
} // error: no initializer for b_member
NoDefault b_member;
};


这些是我已经知道的事情:我知道类 NoDefault 没有默认构造函数,而 struct B 有一个默认构造函数(我们显式定义的)。我还知道,如果我们不为类提供任何构造函数,那么它将自动生成默认构造函数。因此,根据此,应该为 struct A 自动生成默认构造函数,因此 struct A 和 struct B 现在都应该有自己的默认构造函数。现在我收到错误:

main.cpp: In constructor ‘B::B()’:main.cpp:23:5: error: no matching function for call to ‘NoDefault::NoDefault()’B() {} // error: no initializer for b_member

我的问题是为什么struct A中没有相同的错误? struct A 没有自己的合成默认构造函数版本吗?我猜在 struct B 中我们收到错误,因为当编译器尝试默认初始化 b_member 时,它不能这样做,因为类 NoDefault 没有默认构造函数,并且我们没有使用任何初始化程序对于 b_member。但是同样的事情也应该发生在结构体 A 上。为什么这两个结构体之间存在差异?

最佳答案

So according to this a default constructor should be generatedautomatically for struct A

...当需要生成时。

如果您确实尝试创建它的实例,您会发现它也不起作用。如果您尝试声明 A 的实例,编译器将尝试生成一个实例,但会失败。

B 的情况下,您正在定义一个显式构造函数,并且由于它无法显式构造它的 b_member,编译器会尝试默认构造它,并且失败是因为它没有默认构造函数。

关于c++ - 错误: Cannot synthesize a Constructor for A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66303650/

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