2012-03-19 2 views
0

これはMSVCで正常にコンパイルされますが、gccは文句を言います。 The code on ideone。イテレータを参照渡しすることで、何が間違っているのか分かりません。gcc vector :: iteratorを関数に渡すとどうなりますか?

エラー

prog.cpp: In function ‘void FindType()’: 
prog.cpp:8: error: no matching function for call to ‘FindType(__gnu_cxx::__normal_iterator<Var**, std::vector<Var*, std::allocator<Var*> > >, __gnu_cxx::__normal_iterator<Var**, std::vector<Var*, std::allocator<Var*> > >)’ 
prog.cpp:4: note: candidates are: void FindType(__gnu_cxx::__normal_iterator<Var**, std::vector<Var*, std::allocator<Var*> > >&, __gnu_cxx::__normal_iterator<Var**, std::vector<Var*, std::allocator<Var*> > >&) 
prog.cpp:5: note:     void FindType() 
prog.cpp:8: error: return-statement with a value, in function returning 'void' 

コード

#include <vector> 
using namespace std; 
class Var {}; 
void FindType(vector<Var*>::iterator&b, vector<Var*>::iterator&e){} 
void FindType() 
{ 
     vector<Var*> ls; 
     return FindType(ls.begin(), ls.end()); 
} 

答えて

1

はconstの参照を渡します。 .begin()と.end()呼び出しはrvaluesを返します。

リビジョン:あなたが以下のコメントで観察しているようBはconst参照である場合は、あなたは++ Bを行うことはできません。その場合は、以下の考え方が最適です。イテレータを値渡しします。

+0

私はまだconst参照では不正な+ bをする必要があります。だから私はbyvalueを渡す必要があると思いますか? –

+0

ああ、そうだ。あなたが正しいと思います。価値によって。 – thb

関連する問題