C ++"错误:"对象中缺少对象..."取决于gcc版本

时间:2015-01-22 14:48:52

标签: 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 ++标准,但较旧的编译器缺乏适当的实现。

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

1 个答案:

答案 0 :(得分:2)

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