从"标头*"转换为非标量类型 '
conversion from `Header*' to non-scalar type `
谁能告诉我代码的问题
#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>::iterator
与Header*
不是同一类型。
如果你想初始化它,只需写:
vector<Header>::iterator it;
如果你想让它指向某个有效的对象,你需要从vector
对象中获取一个迭代器。
vector<Header> headers;
it = headers.begin();
//or
it = headers.end();
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 特征中的自定义标量类型
- 标量类型的特征模板无法编译固定大小的子矩阵操作
- 结构 init:字符**类型的标量初始值设定项两边的大括号
- 请求从"点*"转换为非标量类型"点"
- 标量类型上的特征模板
- 错误:在 C++ 中从 'Counter' 转换为非标量类型'CountDn'
- 特征:从数组类型中获取标量类型是否记录?
- 错误:请求从"Mstream"转换为非标量类型"std::string {aka std::basic_string<char>}"
- Arduino trim() 和 replace() 方法返回从 'void' 到非标量类型'String'请求的转换
- 错误:移动文件时'QString'为非标量类型"std::__cxx11::字符串"
- 标量类型附加C++
- 复制初始化 - 从 'int' 类型转换为非标量类型
- 在 opencv 上将 vec 类型转换为标量类型
- 为矢量对象请求转换为非标量类型
- 错误:请求从 std::chrono::time_point 浮点数转换为非标量类型长整型
- C++:无法在按位函数后将 int 类型设置为非标量
- 此错误的含义是什么:从 'char* [40] 转换为非标量类型 'std::string