こんばんは。現在vectorに関わるiteratorの使い方で少し詰まってしまったので質問させて頂きます。
自作クラスを格納するvectorコンテナを一つ作り、それに関連するiteratorを作ったのですが、
そのiteratorを介してコンテナ内の情報にアクセスしたいと思っています。
mapに関連したiteratorの場合
アロー演算子でそのiteratorのさす場所のKEY やDATAにアクセス出来たのでvectorでも出来るかとたかをくくっていたのですが、
実際にやってみるとそこの部分でのみどうしてもC2039エラーが起きてしまいます。つきましては解決方法のご指南をして頂きますようお願いします。
プログラム自体はCSVファイルを読み取ってその読み取った情報がちゃんと出るか確認するだけのコンソールアプリケーションでございます。
問題の部分はCGameData.cppの35行目でございます。
【STL】vector の情報に iteratorでアクセスする方法が分かりません
【STL】vector の情報に iteratorでアクセスする方法が分かりません
- 添付ファイル
-
- GameDataClassTestConsolProject.zip
- (863.21 KiB) ダウンロード数: 127 回
百聞は一見にしかず。うんちくだけを頭にぶち込む前に実際に実験した方がいいよ。
書籍とか経験談とか見て知識をつけるのも大事だけど。
書籍とか経験談とか見て知識をつけるのも大事だけど。
Re: 【STL】vector の情報に iteratorでアクセスする方法が分かりません
問題の箇所が数行しかないのにzipを添付する意味はあるんでしょうか?
そもそもこのコードはイテレータを参照していないですね。
正しく書くならこうでしょう。イテレータはローカル変数にしたほうが良いです。
(typedef や "it" は僕の好みの問題です)
そもそもこのコードはイテレータを参照していないですね。
void CGameData::DrawEnemyContainerData(){
for(m_EnemyIterator = m_EnemyContainer.begin(); m_EnemyIterator != m_EnemyContainer.end(); m_EnemyIterator++){
//↓ここでコンテナ内に格納した情報にアクセスして(ちゃんと格納できている確認するという意味で)表示したい
//printf("%d\n"*m_EnemyContainer.Type);
}
}
(typedef や "it" は僕の好みの問題です)
Re: 【STL】vector の情報に iteratorでアクセスする方法が分かりません
ん~・・・h2so5さんの言うとおりにしても、エラーが発生してしまいます。
エラーの内容は
C2513 std::_Vector_Iterator<_Ty._Alloc>指定された型は識別子の名前を指定せずに宣言しています。
です。
コンテナとイテレーターが認識されていない?・・・
エラーの内容は
C2513 std::_Vector_Iterator<_Ty._Alloc>指定された型は識別子の名前を指定せずに宣言しています。
です。
コンテナとイテレーターが認識されていない?・・・
百聞は一見にしかず。うんちくだけを頭にぶち込む前に実際に実験した方がいいよ。
書籍とか経験談とか見て知識をつけるのも大事だけど。
書籍とか経験談とか見て知識をつけるのも大事だけど。
Re: 【STL】vector の情報に iteratorでアクセスする方法が分かりません
void CGameData::DrawEnemyContainerData()
{
const auto end = std::end( enemy_container );
for( auto it=std::begin( enemy_container ); it!=end; ++it )
{
// std::vector<EnemyDrawData*> enemy_containerのように宣言されていて、メンバ関数にdrawがあるなら
(*it)->Draw();
}
}
これだけの用途なら、range-based for(C++11)を用いて
void CGameData::DrawEnemyContainerData()
{
for( auto& data : enemy_container )
{
data->Draw();
}
}
あんまり質問文読めてないのと眠いのでずれてるかもしれません。ごめんなさい。
Re: 【STL】vector の情報に iteratorでアクセスする方法が分かりません
一応元のコードみました。
出力結果:
0
1
#include <iostream>
#include <vector>
struct enemy_func
{
int type;
int behavior;
int frame;
float x, y, z;
};
class game_data
{
std::vector<enemy_func> enemy_container_;
public:
game_data()
{
// テストデータ
enemy_func tmp1 = { 0, 0, 0, 0.0, 0.1, 1.0 };
enemy_func tmp2 = { 1, 2, 3, 4.0, 5.1, 1.9 };
enemy_container_.push_back( tmp1 );
enemy_container_.push_back( tmp2 );
}
public:
void draw()
{
const auto end = enemy_container_.end();
for( auto it=enemy_container_.begin(); it!=end; ++it )
{
std::cout << it->type << "\n";
}
std::cout << std::endl;
}
};
int main()
{
game_data data;
data.draw();
}
0
1
Re: 【STL】vector の情報に iteratorでアクセスする方法が分かりません
C2513はググったらすぐでますので、幸運を!
【追記】
*m_EnemyContainer.Type
とはじめ書いていらっしゃったようですが、参照剥がしの*演算子よりもメンバアクセスの.演算子のほうが優先度が高いので、C2039になるんじゃないでしょうか。なので(*m_EnemyContainer).Typeと書くか、m_EnemyContainer->Typeとするかですね。
【追記】
*m_EnemyContainer.Type
とはじめ書いていらっしゃったようですが、参照剥がしの*演算子よりもメンバアクセスの.演算子のほうが優先度が高いので、C2039になるんじゃないでしょうか。なので(*m_EnemyContainer).Typeと書くか、m_EnemyContainer->Typeとするかですね。
Re: 【STL】vector の情報に iteratorでアクセスする方法が分かりません
解決出来ました。純粋に変数名に使った”Iterator”と言う名前がアウトだっただけみたいです。
”It”に改名したら普通に使えました。
一応タイトルの部分の問題は解決したのでタグを付けさせてもらいます。
タイトルの部分を解決したプロジェクトを上げておきます。
”It”に改名したら普通に使えました。
一応タイトルの部分の問題は解決したのでタグを付けさせてもらいます。
あ、そこは最初に調べた時に出てきた方法で試しに使った部分です。 アローでうまく行かなかったので試してみたんですがやっぱりダメですよね。Suikaba さんが書きました:【追記】
*m_EnemyContainer.Type
とはじめ書いていらっしゃったようですが、参照剥がしの*演算子よりもメンバアクセスの.演算子のほうが優先度が高いので、C2039になるんじゃないでしょうか。なので(*m_EnemyContainer).Typeと書くか、m_EnemyContainer->Typeとするかですね。
タイトルの部分を解決したプロジェクトを上げておきます。
- 添付ファイル
-
- GameDataClassTestConsolProject.zip
- (1.14 MiB) ダウンロード数: 97 回
百聞は一見にしかず。うんちくだけを頭にぶち込む前に実際に実験した方がいいよ。
書籍とか経験談とか見て知識をつけるのも大事だけど。
書籍とか経験談とか見て知識をつけるのも大事だけど。