0

ねえ、コンストラクター内で変数を初期化することから、コンストラクター初期化子リストを使用することに切り替えようとしています。

だから書く代わりに

Class::Class(int width, int height) {
  this->width = width;
  this->height = height;
}

私はこれをやっています:

Class::Class(int width, int height) : 
  width(width), 
  height(height) {
}

それはすべて機能していますが、今私の問題です...次のコンストラクターがあるとします:

Class::Class(int width, int height) {
  this->width = width;
  this->height = height;
  this->state.setCurrState(this->state.stateMenu);
  this->state.setPrevState(this->state.getCurrState());
}

「状態」は、ヘッダーで作成するクラス「状態」の単なるオブジェクトです。関数 setCurrState および setPrevState は void 型で、クラスのプライベート変数を設定するだけです。

コンストラクターを変換するにはどうすればよいですか? 初期化子リストに関数を記述できることはわかっていますが、追加したい関数は何も返さない...それらは無効なので、どのように呼び出すかわかりませんか?

Class::Class(int width, int height) :
  width(width), 
  height(height) 
  // call functions here... but how?
  {
}

どうもありがとうございました <3

4

4 に答える 4

3

少なくともあなたの場合、イニシャライザリストでこれらの関数を呼び出す追加のポイントと利点はありません。

コンストラクタ本体で呼び出すだけです。


重要な注意点:

あなたstateは のメンバーだと言いましたClass。したがって、コンストラクターのレベルでstateは、まだ構築されていないため、それ自体を構築することはどういうわけか無意味です:

state.setCurrState(state.stateMenu);
state.setPrevState(state.getCurrState());

のクラスのコンストラクタを作成して、statecurr/prev を初期状態に設定してみてください。

于 2013-09-27T15:10:18.950 に答える