我有这个 GLfloat 的 2D 数组:
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>
.我的目标是将 2D 数组的一个子数组中的数据添加到向量的末尾。我的第一次尝试是这样的:
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 标准库的特定实现中向量类型参数的名称。因此,编译器告诉您无法将 GLfloat[12]
类型的值转换为向量存储的任何值。
但是你为什么要尝试插入数组呢?
问题在于调用insert
中的那些额外&
。这将修复它:
normals.insert(
normals.end(),
CubeData::facenormals[direction],
CubeData::facenormals[direction] + 12
);
CubeData::facenormals
是一个数组数组,所以CubeData::facenormals[direction]
是一个数组。这通常会在指针中自动衰减,这会给你你想要的东西,但是通过预置一个&
,你会得到一个指向该数组的指针。该指针被取消引用到数组中。
通过删除&
,你让数组衰减到一个GLfloat*
,然后它被取消引用到你可以分配给GLfloat
的东西。