爲什麼不能將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