ページ 1 / 1
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 が初期化されます。
こんなに簡単に記述する方法もあるのですね.
状況に合わせて使い分けていきたいと思います.
みなさん,ありがとうございました.