2013-06-24 47 views
7

に指定したが、私は、私はBH持っC++初期化非仮想メソッド

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

以下のようにああをしている私はちょうどしようとすることで、構文エラーをチェックしようとしていますこのよう g++ -c a.h b.h

としてのヘッダーをコンパイルし、私は以下のerrror

を取得

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

このエラーは何を意味しますか?

+1

仮想宣言する必要があります: 'virtual void doSomething()= 0;' – jrok

+1

また、なぜヘッダーをコンパイルしていますか?それは変だ。あなたはC++でプロジェクトを構築するのが初めてですか? – Wug

答えて

9

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

(ルールがあるとして、「仮想、常に仮想たら。」)そこに技術的に必要はありませんが、派生クラスのメンバ関数の宣言でvirtualを繰り返しても良い方法です

0

それはそのAを意味し、何かがバーチャルではないのですが、あなたはそれを純粋なバーチャルにしようとしています。

4

問題はコンパイラが言うとおりです。

class A 
{ 
public: 
    virtual void doSomething()=0; // virtual keyword needed 
}; 
関連する問題