从"标头*"转换为非标量类型 '

conversion from `Header*' to non-scalar type `

本文关键字:类型 标量 标头 转换      更新时间:2023-10-16

谁能告诉我代码的问题

#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

thanks in advance

变化

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]

这意味着vector<Header>::iteratorHeader*不是同一类型。

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

vector<Header>::iterator it;

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

vector<Header> headers;
it = headers.begin();
//or
it = headers.end();