ページ 11

vector宣言時の要素数について

Posted: 2014年9月28日(日) 16:07
by たぬき
C++で簡単なゲームを作っている者です.

下のようなコードを書いたのですが,

コード:

//Data.h
class Data{
//略
public:

static struct _SaveData{
			BYTE stage;
			BYTE money;
			BYTE score;
			vector<int> Belongings;
			bool GraphFlag1, GraphFlag2, GraphFlag3, GraphFlag4, GraphFlag5, GraphFlag6, GraphFlag7, GraphFlag8;
			bool ClearFlag;
		}SaveData;
}

コード:

vector<int> Belongings;
の部分を

コード:

vector<int> Belongings(10);
と書くと,10の部分に”型指定子が必要です”
というエラーが出ます.

コード:

vector<int> Belongings(int i = 10);
と書くとエラーが消えました.

vectorは宣言時にコンストラクタで要素数を指定できると思うのですが,
どうしてエラーが出るのでしょうか.

Re: vector宣言時の要素数について

Posted: 2014年9月28日(日) 21:18
by a5ua
クラス(もしくは構造体)のメンバー変数のコンストラクタを呼ぶにはメンバーイニシャライザを使用します。

コード:

//Data.h
class Data{
//略
public:
 
	static struct _SaveData{
		_SaveData() : Belongings(10) // 要素数10で初期化
		{
		}

		BYTE stage;
		BYTE money;
		BYTE score;
		vector<int> Belongings;
		bool GraphFlag1, GraphFlag2, GraphFlag3, GraphFlag4, GraphFlag5, GraphFlag6, GraphFlag7, GraphFlag8;
		bool ClearFlag;
	}SaveData;
};
ちなみに、以下のコードは、
戻り値がvector<int>で、intを引数(デフォルト引数 10)とする関数宣言なので、メンバー変数とはなりません。

コード:

vector<int> Belongings(int i = 10);

Re: vector宣言時の要素数について

Posted: 2014年10月01日(水) 21:57
by あたっしゅ
vector<int> Belongings(10,0);

これで、10 個の 0 で、Belongings が初期化されます。

Re: vector宣言時の要素数について

Posted: 2014年10月02日(木) 23:55
by たぬき
御回答ありがとうございます.
返信が遅れてしまい申し訳ありません.
a5ua さんが書きました:クラス(もしくは構造体)のメンバー変数のコンストラクタを呼ぶにはメンバーイニシャライザを使用します。

コード:

//Data.h
class Data{
//略
public:
 
	static struct _SaveData{
		_SaveData() : Belongings(10) // 要素数10で初期化
		{
		}

		BYTE stage;
		BYTE money;
		BYTE score;
		vector<int> Belongings;
		bool GraphFlag1, GraphFlag2, GraphFlag3, GraphFlag4, GraphFlag5, GraphFlag6, GraphFlag7, GraphFlag8;
		bool ClearFlag;
	}SaveData;
};
ちなみに、以下のコードは、
戻り値がvector<int>で、intを引数(デフォルト引数 10)とする関数宣言なので、メンバー変数とはなりません。

コード:

vector<int> Belongings(int i = 10);
たしかに,この宣言の仕方だと関数になってしまいますね.
vector型の戻り値という発想ができていませんでした.
あたっしゅ さんが書きました:vector<int> Belongings(10,0);

これで、10 個の 0 で、Belongings が初期化されます。
こんなに簡単に記述する方法もあるのですね.

状況に合わせて使い分けていきたいと思います.
みなさん,ありがとうございました.