我有这个 GLfloats 的二维数组:
static constexpr GLfloat facenormals[6][12] = {
{
0.0f, 1.0f, 0.0f, // TOP
},
{
0.0f, -1.0f, 0.0f, // BOTTOM
},
{
0.0f, 0.0f, 1.0f, // FRONT
},
{
0.0f, 0.0f, -1.0f, // BACK
},
{
1.0f, 0.0f, 0.0f, // RIGHT
},
{
-1.0f, 0.0f, 0.0f, // LEFT
}
};
和一个std::vector<GLfloat>
.我的目标是将二维数组的一个子数组中的数据添加到 vector 的末尾。我的第一次尝试是这样的:
normals.insert(
normals.end(),
&CubeData::facenormals[direction],
&CubeData::facenormals[direction] + 12
);
但是在构建解决方案时出现错误“无法从‘const GLfloat [12]’转换为‘_Objty’”。我尝试更改 insert()
的参数调用这个:
normals.insert(
normals.end(),
CubeData::facenormals + 12 * direction,
CubeData::facenormals + 12 * (direction + 1)
);
但编译时出现同样的错误。
如何正确执行此操作,错误是什么意思?
最佳答案
_Objty
是 MSVC 标准库的特定实现中 vector 类型参数的名称。所以编译器告诉你不能转换 GLfloat[12]
类型的值。到 vector 存储的任何内容。
但是为什么要尝试插入数组?
问题在于那些额外的&
在调用 insert
.这将解决它:
normals.insert(
normals.end(),
CubeData::facenormals[direction],
CubeData::facenormals[direction] + 12
);
CubeData::facenormals
是数组的数组,所以 CubeData::facenormals[direction]
是一个数组。这通常会在指针中自动衰减,这会给你你想要的,但是通过在前面加上 &
,您反而会得到一个指向该数组的指针。该指针被取消引用到一个数组中。
通过删除 &
,你让数组衰减到 GLfloat*
, 然后它被取消引用为你可以分配给 GLfloat
的东西.
关于c++ - 错误消息 "cannot convert from ' const GLfloat [12 ]' to ' _Objty'”将二维数组插入 std::vector 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57128860/