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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たぬき

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

#1

投稿記事 by たぬき » 10年前

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

アバター
a5ua
記事: 199
登録日時: 14年前

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

#2

投稿記事 by a5ua » 10年前

クラス(もしくは構造体)のメンバー変数のコンストラクタを呼ぶにはメンバーイニシャライザを使用します。

コード:

//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);

アバター
あたっしゅ
記事: 667
登録日時: 14年前
住所: 東京23区
連絡を取る:

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

#3

投稿記事 by あたっしゅ » 10年前

vector<int> Belongings(10,0);

これで、10 個の 0 で、Belongings が初期化されます。
VTuber:
[香車]東上☆Aho(暎帆)☆海美
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

たぬき

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

#4

投稿記事 by たぬき » 10年前

御回答ありがとうございます.
返信が遅れてしまい申し訳ありません.
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 が初期化されます。
こんなに簡単に記述する方法もあるのですね.

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

閉鎖

“C言語何でも質問掲示板” へ戻る