从`Header *'转换为非标量类型`

时间:2013-05-29 07:14:42

标签: c++

任何人都可以用代码告诉问题

#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

提前致谢

2 个答案:

答案 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>::iteratorHeader*的类型不同。

如果你想初始化它只需写:

vector<Header>::iterator it;

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

vector<Header> headers;

it = headers.begin();
//or
it = headers.end();