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

use*_*748 7 c++ overriding g++ c++11

我有基础课

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

public:
  virtual void myfunc()=0; 
}
Run Code Online (Sandbox Code Playgroud)

我派上课了

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

public:
  void myfunc() override; 
}
Run Code Online (Sandbox Code Playgroud)

当我编译时g++ -std=c++0x,我得到错误,突出显示重写函数, error: expected ‘;’ at end of member declaration error: ‘override’ does not name a type

g ++版本是4.6.

hai*_*aka 9

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


0x4*_*2D2 8

g ++ 4.6.3不支持overrideC++ 11 的功能.当你拿走合成错误时,这段代码在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;
};
Run Code Online (Sandbox Code Playgroud)