什么可能在此语句中生成编译器错误以推进迭代器?

时间:2010-01-14 21:53:02

标签: c++ compiler-errors

以下行生成编译器错误:

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类型?

5 个答案:

答案 0 :(得分:5)

advance不会返回高级迭代器,它会移动作为参数传递的迭代器。所以你的代码应该是:

std::vector<int>::iterator blah = instructions.begin();
advance(blah, x);

答案 1 :(得分:2)

如果不这样看,我猜测advance函数会返回void,您将其分配给blah

尝试:advance(blah, x);,当然假设你已经初始化了等等:blah = instructions.begin();

答案 2 :(得分:1)

提前的返回值无效,而不是vector<int>::iterator。它取而代之的是引用第一个参数并使其前进。

答案 3 :(得分:1)

std::advance不会返回迭代器 - 您需要更多地使用它:

std::vector<int>::iterator blah = instructions.begin();
advance(blah, x);

或者,因为vector无论如何都有随机访问迭代器:

std::vector<int>::iterator blah = instructions.begin()+x;

答案 4 :(得分:1)

cplusplus.com告诉我std::advance返回void,因此问题就出现了。

相关问题