为什么不能将C++编译器识别g()
和b
被继承的Superclass
成员在此代码所示:访问超类的保护成员在C++中使用模板
template<typename T> struct Superclass {
protected:
int b;
void g() {}
};
template<typename T> struct Subclass : public Superclass<T> {
void f() {
g(); // compiler error: uncategorized
b = 3; // compiler error: unrecognized
}
};
如果我简化Subclass
和刚刚继承然后它编译。当完全符合g()
时,它也编译为Superclass<T>::g()
和Superclass<T>::b
。我正在使用LLVM GCC 4.2。
注意:如果我在超类中公开g()
和b
,它仍会失败并出现相同的错误。或者
template<typename T> struct Subclass : public Superclass<T> {
void f() {
this->g();
this->b = 3;
}
};
,正如你:
微软的编译器不服从这条规则。我很生气 – 2010-10-24 21:06:24
谢谢,那有效。 – andrewz 2010-10-25 00:44:11
@阿门:只有这一个规则?哇,它真的*变得更好了。 :-D – 2010-10-25 06:04:18