2

谁能告诉代码的问题

#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

提前致谢

4

2 回答 2

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]

于 2013-05-29T07:20:05.947 回答
0

这意味着它vector<Header>::iteratorHeader*.

如果要初始化它,只需编写:

vector<Header>::iterator it;

如果你想让它指向一些有效的东西,你需要从一个vector对象中获取一个迭代器。

vector<Header> headers;

it = headers.begin();
//or
it = headers.end();
于 2013-05-29T07:31:53.687 回答