c++ - 错误消息 "cannot convert from ' const GLfloat [12 ]' to ' _Objty'”将二维数组插入 std::vector 时

标签 c++ arrays vector

我有这个 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/

相关文章:

c++ - 将 C++ 源代码反向为 UML 类图

c++ - 从 SQL Server 的 Azure 帐户获取 IP

python - 如何将数据集拆分/分区为训练和测试数据集,例如交叉验证?

ruby - 如何对多个数组的对应元素求和?

c++ - C/C++ PCM开源音频分析仪

c++ - 将非专用模板作为模板参数传递

Javascript Array.some() 和 Array.every() 相当于 Set?

C++ 指针 vector 如何影响性能?

c++ - 找到一种方法将映射中的匹配键和值 push_back 到 vector 中