Что не так с передачей gcc vector :: iterator в функцию? - PullRequest
0 голосов
/ 20 марта 2012

Это прекрасно компилируется в MSVC, но gcc жалуется. код на ideone .Я не понимаю, что не так, передавая итераторы по ссылке.

Ошибка

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 Ответ

1 голос
/ 20 марта 2012

Передача константных ссылок. Вызовы .begin () и .end () возвращают значения.

Редакция: Однако, как вы заметили в комментариях ниже, вы не можете сделать ++ b , если b является константной ссылкой. Ваша идея ниже кажется наилучшей в этом случае: передайте этот итератор по значению.

...