我面临着一个gcc版本(4.3.2)的编译错误,而相同的代码将被编译而不会抱怨更新版本的gcc,例如: 4.5.2。
以下示例说明了问题:
class Base {
protected:
int member;
};
template<typename T>
class A : public Base {
};
template<typename T>
class C : public A<T> {
C() {
Base::member = 1;
}
};
int main() {
}
对于4.3.2我得到了:
test.cpp: In constructor 'C<T>::C()':
test.cpp:4: error: object missing in reference to 'Base::member'
test.cpp:14: error: from this location
对于4.5.2,它编译得很好。
如果一个编译器版本接受代码,则不能完全错误。我的猜测是它符合C ++标准,但较旧的编译器缺乏适当的实现。
答案 0 :(得分:2)
这绝对是早期版本的g ++中的一个错误,但解决方案很简单:只需将this->
添加到表达式中,如this->Base::member = 1;
,即使编译器不兼容。