将 2D 数组插入 std::vector 时"cannot convert from 'const GLfloat [12]' to '_Objty'"错误消息



我有这个 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的东西。

最新更新