无法从向量<T>转换为 T
Cannot cast from vector<T> to T
我有一个函数,它接受一些T类型的参数:
constexpr inline const bool isReflex(const T x1, const T y1, const T x2, const T y2, const T x, const T y)
使用项目调用此函数形成一个向量 yiels 到错误C2664: Cannot convert argument 1 from 'vector<T, std::allocator<_Ty>>' to 'const T'
:
vector<T>* v = new vector<T>; // I am not creating the vector myself, this is just for demonstration.
// The real vector is passed as const vector<T>* to a function executing the following:
if (isReflex(v[i-2], v[i-1], v[i], v[i+1], v[i+2], v[i+3]))
// ^^^^^^ error
这对我来说毫无意义,因为我传递的不是矢量,而是它的内容。是什么原因导致这种行为?
编辑
哎哟。
这是因为v
不是向量,而是指向向量的指针。因此,您需要一个取消引用运算符:
if (isReflex((*v)[i-2], (*v)[i-1], (*v)[i], (*v)[i+1], (*v)[i+2], (*v)[i+3]))
错误消息可能看起来不完全清楚的原因是[]
运算符也适用于指针,并且行为类似于具有偏移量的取消引用运算符。换句话说,C++编译器将变量v
视为内置的向量数组,将索引[i-2]
应用于该数组,并报告错误,因为v[i-2]
表达式的类型是向量。
实向量作为
const vector<T>*
传递给函数
您可以创建一个引用变量来保留旧语法:
const vector<T> *pv // function parameter
const vector<T>& v = *pv;
// This will work now
if (isReflex(v[i-2], v[i-1], v[i], v[i+1], v[i+2], v[i+3])) {
...
}
您在type *
对象上使用[n]
运算符 - 在您的情况下vector<T> *
.您的编译器可能会将其解释为"给我从此地址开始计数的第 n 个向量",而不是"给我此地址指向的向量中的第 n 个元素"。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 使用shared_ptr<字符串>转换为一个无序集合<字符串>