2017-02-28 9 views
3

複数のファイルを適切に使用する方法を理解しようとしています。私はヘッダーファイルでクラスを作った。次に、そのヘッダファイルを含み、Stage :: Stage(){}などですべてを実装したcppファイルです。Displayというクラスも作成しましたが、デフォルトのコンストラクタはありませんが、2つの整数引数が必要です。私は、Stageクラス内の関数作っ:オブジェクトがrefrenceによって関数に渡されると、そのコンストラクタが呼び出されます。

Stage::Stage (Display &display_){ 
    display = display_; 
} 

をしかし、それはエラーが発生「への呼び出しに該当する機能 『を表示::ディスプレイ(』)」 真である、それは存在しないが、それははずの存在する必要があります。私はここで新しいDisplayオブジェクトを作成しようとしているわけではありません。既存のDisplayオブジェクトをStageオブジェクトに渡そうとしています。 (私はDev C++を使用しています)

+2

'display = display_;'は、 'display'の代入演算子を呼び出すことを意味します。あなたは 'display 'が何であるかは言いませんでしたが、おそらくそれは' Stage'のメンバ変数であり、これは既にこの点で構築されていなければなりません –

答えて

3

Stageコンストラクタは、コンストラクタの本体を実行する前にdefault-initialize displayする必要があります。すべてのクラスメンバーは、クラスのコンストラクターの本体を実行する前に構築する必要があります。例外なく。したがって、示されたコードは、代入演算子を使用する前にデフォルトのdisplayを作成しようとします。

Displayにはデフォルトのコンストラクタがないため、これは失敗します。したがって、コンストラクタにはコンストラクタが存在しないという苦情があります。この状況で

明示的コンストラクタの初期化セクションでdisplayを構築する必要があります。

Stage::Stage (Display &display_) : display{display_} 
{ 
} 

か、事前にC++ 11:

Stage::Stage (Display &display_) : display(display_) 
{ 
} 

これは、明示的display会員権を構築コピーコンストラクタを最初から使用しています。

関連する問題