任何人都可以用代码告诉问题
#include <iostream>
#include <vector>
using namespace std;
class Header
{
};
int main()
{
Header* _start;
vector<Header>::iterator it = _start;
return 0;
}
从Header*'
转换为非标量类型:
__gnu_cxx::__normal_iterator<Header*, std::vector<Header,
std::allocator<Header> > >' requested
提前致谢
答案 0 :(得分:2)
更改
vector<Header>::iterator it = _start;
到
vector<Header>::iterator it(_start);
修改强> 问题是当你使用赋值时,编译器将它扩展为这样的代码:
vector<Header>::iterator it = static_cast<vector<Header>::iterator>(_start);
但是没有从指针到迭代器的隐式或显式类型转换。
另一方面,迭代器有一个构造函数T::iterator(const T *&)
,您可以使用它。
<强> EDIT2:强> 混合指针(C风格)和迭代器(C ++风格)并不是一个好主意。当您使用容器(C ++样式)而不是数组(C样式)时,您不需要使用原始指针。容器提供了获取不同迭代器的方法。
例如,您应该使用v.begin() + i
代替(T*)&v[i]
答案 1 :(得分:0)
这意味着vector<Header>::iterator
与Header*
的类型不同。
如果你想初始化它只需写:
vector<Header>::iterator it;
如果你想让它指向有效的东西,你需要从vector
对象获得一个迭代器。
vector<Header> headers;
it = headers.begin();
//or
it = headers.end();