2

多くの関数をインラインで定義するC++クラスヘッダーがあります。.cppコンパイルを高速化するために、これらの関数をヘッダーの外に別のファイルに移動したいと思います。通常の関数を別のファイルに移動し、ヘッダーに関数の減速のみを保持することはできますが、仮想関数をに移動しようとすると.cpp、次のエラーが発生します。

エラー2-エラーC2723:'仮想'ストレージクラス指定子が関数定義で無効です

それ、どうやったら出来るの?機能は次のとおりです。

 virtual void SoundMixerSub::SetFilters(const MixerFilter& f)
 { 
....
 }
4

1 に答える 1

11

virtualそれが言うように、§7.1.2のように、クラスの外で関数定義を持つことはできません:

virtual指定子は、非静的クラスメンバー関数の最初の宣言でのみ使用されます。

宣言を保持virtualし、定義から削除します。したがって、ヘッダーファイルでは次のようになります。

class SoundMixerSub : ...
{
  // ...
  virtual void SetFilters(const MixerFilter&);
  // ...
};

次に、実装ファイルで:

void SoundMixerSub::SetFilters(const MixerFilter& f)
{ 
  // ...
}
于 2013-03-24T14:52:52.210 に答える