C++ "error: "object missing in reference to ..." depends on gcc version

C++ "error: "object missing in reference to ..." depends on gcc version

我在使用一个 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++ 标准,但较旧的编译器缺少相同的正确实现。

  1. 到底是什么问题?
  2. 是否有一种可移植的方式来编写这种代码,以便尽可能多的编译器接受它?

这绝对是早期版本的 g++ 中的一个错误,但解决方案很简单:只需将 this-> 添加到表达式中,因为 this->Base::member = 1; 不会混淆编译器。