以下行生成编译器错误:
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
类型?
答案 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
,因此问题就出现了。