C“错误:”对象缺少参考…“取决于gcc版本

我正面临着一个
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;这与编译器无关.

点赞