- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我正在尝试了解构造函数在 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/
我是一名优秀的程序员,十分优秀!