Следующая строка генерирует ошибку компилятора:
std::vector<int>::iterator blah = std::advance(instructions.begin(), x );
где я объявил:
std::vector<int> instructions; int x;
Я получаю ошибку:
error C2440: 'initializing' : cannot convert from 'void' to 'std::_Vector_iterator<_Ty,_Alloc>'.
Какой элемент этого утверждения имеет тип void?
void
advance не возвращает расширенный итератор, он перемещает итератор, переданный в качестве параметра. Таким образом, ваш код должен читать:
std::vector<int>::iterator blah = instructions.begin(); advance(blah, x);
Не глядя на это, я предполагаю, что функция advance возвращает void, который вы присваиваете blah
advance
blah
try: advance(blah, x);, при условии, конечно, что вы инициализировали бла: blah = instructions.begin();
advance(blah, x);
blah = instructions.begin();
cplusplus.com говорит мне, что std::advance возвращает void, отсюда и проблема.
std::advance
std::advance не возвращает итератор - вам нужно использовать его как:
Или, поскольку у вектора в любом случае есть итераторы произвольного доступа:
std::vector<int>::iterator blah = instructions.begin()+x;
Возвращаемое значение аванса является недействительным, а не vector<int>::iterator. Вместо этого он берет первый параметр по ссылке и увеличивает его.
vector<int>::iterator