7

我有基类

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。

4

2 回答 2

9

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

于 2013-04-02T23:43:04.433 回答
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;
};
于 2013-04-02T23:43:25.920 回答