2011-06-21 6 views
-1

私は、このコマンドによってベクトルを埋めるベクトルとイテレータ

vector<Field> m_vField; 

の下のように定義されたベクトルを持っている:

AddFiled(const Field& aiField) 
{ 
    m_vField.push_back(aiField); 
} 

しかし、私が実行しようとイテレータのベクターは、これが最初の反復の後にクラッシュしたとき「アクセス違反の読み取り場所」

vector<Field>::iterator it; 
for(it = m_vField.begin(); it != m_vField.end() ; it++) 
{ 
    dosomthing 
} 

ありがとうございます。

+5

投稿したコード(m_vFieldとvField)にベクターの名前が2つあります。カット/ペーストのエラーですか?また、イテレータの使い方を示してください。 – Mat

+2

'dosomthing'は' it'を修正するのですか、またはベクトルから要素を追加または削除しますか?投稿したコードはアクセス違反の原因にはなりません。 –

+0

宣言されているベクターは、クラスか何かの中にありますか?ただあなたがそれを直接行うことができるときにベクトルに押し込むための別の関数を書いているので疑いの余地はありません。 – Balanivash

答えて

0

変数に間違った名前が付いていると思われます。あなたのループにvFieldを使用したのに対し、ベクトルm_vFieldはありません。

+2

コードは確かにコンパイルされませんでしたが、コードがクラッシュします... – duedl0r

+1

これは、なぜコード内の反復処理がアクセス違反を引き起こすのか説明しません。また、そのような状況では、質問に答えるときには、ほとんど常にOPのタイプミスです(ただし必ずしもそうではありません)。あなたは答えではなくコメントとして投稿するべきです。 –

+0

ねえ。ベクタはクラス内で宣言されていると考えてください。単なる疑問でもありますが、別の関数を書いて要素をベクトルにプッシュすると、直接実行することもできます。 – Balanivash

関連する問題