C++ vectorの2次元配列

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

C++ vectorの2次元配列

#1

投稿記事 by ももうまい » 11年前

今プログラムを製作中です。
自作のクラスでPanelというクラスがあります。
このPanelのコンストラクタはデフォルトのみです。
このPanelクラスを別のBoardというクラスに2次元配列として保持させたいのですが、
vectorの2次元配列panelとして宣言しています。

コード:

class Board{
std::vector< std::vector<Panel> > panel;
public:
Board(){

for(int i=0;i<10;i++){

panel.push_back( std::vector<Panel>() );
for(int j=0;j<10;j++){
panel[i].push_back( std::vector< std::vector<Panel> >() );
}

}

}
};
しかし、上の10行目
panel.push_back( std::vector< std::vector<Panel> >() );
のように記述すると、エラーが出てしまいます。
としたら、どう書けばエラーはなくなるのでしょう?

かなたん
記事: 50
登録日時: 12年前
連絡を取る:

Re: C++ vectorの2次元配列

#2

投稿記事 by かなたん » 11年前

コード:

std::vector< std::vector<Panel> > panel;
という宣言の変数panelにpush_backできるのはstd::vector<Panel>型で、panelにpush_backできるのはPanel型です。
なので、

コード:

panel[i].push_back( std::vector< std::vector<Panel> >() );
という書き方は間違っていることになります。
たとえば

コード:

for(int i=0;i<10;i++){
	std::vector<Panel> pv;
	panel.push_back(p);
	for(int j=0;j<10;j++){
		Panel pc;
		panel[i].push_back(pc);
	}
}
というように書けばエラーは出ないと思います。
私はそもそも

コード:

panel.push_back( std::vector<Panel>() );
という書き方ができるというのを知らなかったこともあって以下のコードはあまり自信が持てるものではありませんが、(検証もしていません)

コード:

for(int i=0;i<10;i++){
	panel.push_back( std::vector<Panel>() );
	for(int j=0;j<10;j++){
		panel[i].push_back(Panel ());
	}
}
という書き方でもエラーは出なくなるかもしれません。
わからないことも、ブログに書いているうちにひらめくこともある。
本当に行き詰ったら、考え直すのも1つの手かな。

ももうまい

Re: C++ vectorの2次元配列

#3

投稿記事 by ももうまい » 11年前

ありがとうございます!
ためしにやってみたらできました!

閉鎖

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