请注意Derived
类构造函数有ii
作为其第一个参数,但传递给Base
的参数故意等于i
。
class Base
{
protected:
int i;
public:
Base(int i) : i(i) {}
};
class Derived : public Base
{
private:
int k;
public:
Derived(int ii, int k) : Base(i), k(k) {} // Why not C2065: 'i' undeclared identifier
};
int main()
{
}
答案 0 :(得分:7)
由于i
是继承自Base
的成员变量,因此 定义。您可以在初始化列表中自由访问成员变量,但您正在做的是在变量初始化之前访问变量,我相信,它是未定义的行为。
答案 1 :(得分:3)
因为它从基类中看到i
并在初始化程序中使用它。如果您将受保护更改为私有,则会收到有关Base::i
为私有的错误。