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

overrideキーワードは GCC 4.6 ではサポートされていません。myfunc を上書きしたい場合は、override キーワードを削除するか、GCC を 4.7 バージョンにアップグレードしてください。(参照: https://blogs.oracle.com/pcarlini/entry/c_11_tidbits_explicit_overrides )

于 2013-04-02T23:43:04.433 に答える
8

overrideg++ 4.6.3 はC++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 に答える