1

私はこのコードを持っています:

std::vector<A>::iterator it;
for(auto it = m_vA.begin(); it != m_vA.end(); it++)

そして私はエラーを起こします:

ISO C++ forbids declaration of 'it' with no type
cannot convert '__gnu_cxx::__normal_iterator<A* const*, std::vector<tp::Vehicule*, std::allocator<A*> > >' to 'int' in initialization

そして、私が自動車を取り除くと

erreur: no match for 'operator=' in 'it = ((const B*)this)->B::m_vA.std::vector<_Tp, _Alloc>::begin [with _Tp = A*, _Alloc = std::allocator<A*>]()'

Bは私のループを持つクラスです

ありがとう

4

4 に答える 4

2

c++11 が有効になっていないようです。auto有効にする場合は、次の行を削除する必要があります。

std::vector<A>::iterator it;

c++11 を使用できず、auto を削除した後にエラーが発生する場合は、このコードを const メソッドに入れているように見えるので、iterator を const_iterator に置き換えます。

std::vector<A>::const_iterator it;
for(it = m_vA.begin(); it != m_vA.end(); it++)

ループの後にこの反復子が必要ない場合は、1 行にすることもできます。

for(std::vector<A>::const_iterator it = m_vA.begin(); it != m_vA.end(); it++)
于 2013-11-13T18:45:41.557 に答える
1

私が見たところ、あなたはconstメソッドにいるので、 を使用するconst_iteratorか、 を削除する必要がありますconst

autoに変数を宣言する場合は必要ありません。エラーは発生せず、警告だけですが、いずれかの方法を選択する必要があります;)

于 2013-11-13T18:43:12.320 に答える
1

問題を解決するには、キーワードを削除してください。 auto

そのように使用するには、C++11 を有効にする必要がありますauto。gcc コンパイラを使用している場合は、-std=c++11または-std=c++0xコンパイラのスイッチで有効にできます。

現在、auto単に省略される古い C コンパイラによって継承されたキーワードを使用しています。コンパイラは、あなたがit再び宣言していると考えていますが、型はありません。

于 2013-11-13T18:44:11.003 に答える