我正面临着一个
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标准,但较旧的编译器缺乏适当的实现.
>究竟是什么问题?
>是否有一种可移植的方式来编写这种代码,以便尽可能多的编译器接受它?
最佳答案 这绝对是早期版本g中的一个错误,但解决方案很简单:只需添加这个 – >表达式,因为this-> Base :: member = 1;这与编译器无关.