我一直在摆弄一个程序大约20分钟,我发现由于某种原因它不会让我在初始化列表中使用继承变量。这个程序,例如:使用初始化器列表和继承变量
class A {
protected:
int i;
};
class B : public A {
public:
B() : i(45) { }
};
int main() {
B b;
}
会给出错误
error: class ‘B’ does not have any field named ‘i’
但是,如果你改变了构造这样:
B() { i = 45; }
它编译。
我从来不知道你不能初始化继承变量。我的问题是,为什么?
好吧,*严格来说*,全局变量可以初始化两次。首先是零初始化,然后是初始化它。仍然,这个案件正确。 :) – Xeo 2011-06-10 23:06:41
啊,这是非常有道理的。谢谢。 – 2011-06-10 23:07:21