覆盖关键字在编译时抛出错误

时间:2013-04-02 23:35:30

标签: c++ c++11 g++ override

我有基类

template<typename T>
Class Base {
  Base();

public:
  virtual void myfunc()=0; 
}

我派生了班级

template<typename T>
Class Derived: public Base<T> {
  Derived():Base() {
  }

public:
  void myfunc() override; 
}

当我编译g++ -std=c++0x时,我收到错误,突出显示覆盖功能, error: expected ‘;’ at end of member declaration error: ‘override’ does not name a type

g ++版本是4.6。

2 个答案:

答案 0 :(得分:9)

GCC 4.6不支持

覆盖关键字。如果要覆盖myfunc,只需删除override关键字或将GCC升级到4.7版本。 (参考:https://blogs.oracle.com/pcarlini/entry/c_11_tidbits_explicit_overrides

答案 1 :(得分:7)

g ++ 4.6.3不支持C ++ 11的override功能。当你带走了合成错误时,这段代码在4.7.2和Clang中编译得很好。

此外,我认为这就是您的代码所在:

template <typename T>
class Base {
   Base();

   public:
      virtual void myfunc() = 0; 
};

template <typename T>
class Derived : public Base<T> {
   Derived() : Base<T>() {}

   public:
      void myfunc() override;
};