14

私は以下に示すようにああを持っています

class A
{
public:
    void doSomething()=0;
};

それから私は以下に示すようにbhを持っています

#include "a.h"

class b: public A
{
public:
    void doSomething();
};

次のようなヘッダーをコンパイルして、構文エラーをチェックしようとしています。 g++ -c a.h b.h

そして、私は以下のエラーを取得します

a.h:4: error: initializer specified for non-virtual method 'void A::doSomething()'

このエラーはどういう意味ですか?

4

3 に答える 3

20

メンバー関数= 0は、仮想の場合にのみ抽象 ( ) として宣言できます。virtual基本クラス ( class 内) の関数宣言にキーワードを追加しAます。

C++11 より前virtualのバージョンでは、派生クラス メンバー関数の宣言で繰り返すことも推奨されていましたが、技術的には必要ありません (規則は「一度仮想化すると、常に仮想化する」ため)。

C++11 では、override将来の変更に対してコードを安全にするために、仮想メンバー関数をオーバーライドするときに使用できるキーワードが導入されました (つまり、基本関数のシグネチャが変更された場合、派生コードは黙って間違っているのではなく、コンパイルに失敗します)。virtualが存在する場合も含めるかどうかはoverride、個人の好み/プロジェクトのコーディング基準次第です。私はそれを不要と考えて省略していますが、それは私の個人的な好みです。

于 2013-06-24T18:40:08.200 に答える
-1

これは、A何かが仮想的ではないことを意味しますが、それを純粋に仮想化しようとしています。

于 2013-06-24T18:40:18.513 に答える