【发布时间】:2010-10-21 04:11:11
【问题描述】:
我有一个关于在派生类的构造函数中初始化继承成员的问题。示例代码:
class A
{
public:
int m_int;
};
class B: public A
{
public:
B():m_int(0){}
};
这段代码给了我以下输出:
In constructor 'B::B()':
Line 10: error: class 'B' does not have any field named 'm_int'
(见http://codepad.org/tn1weFFP)
我猜为什么会这样? m_int 应该是B 的成员,并且在B 中的m_int 初始化发生时,父类A 应该已经初始化(因为父构造函数在继承类的成员初始化之前运行)。我的推理哪里出错了?这段代码到底发生了什么?
EDIT:我知道初始化此成员的其他可能性(基构造函数或派生构造函数中的赋值),但我想了解为什么我尝试它的方式是非法的?一些特定的 C++ 语言功能之类的?如果可能,请指出 C++ 标准中的一段。
【问题讨论】:
标签: c++ initialization initialization-list