函数概率:在'['标记之前预期的非限定标识

时间:2014-02-05 17:56:34

标签: c++ constexpr

我收到了一个不合规定的错误:在'['令牌之前预期的非限定ID。当然,因为这不是Java或C#,我不知道发生了什么。

这是我的代码:

constexpr GLfloat[NUM_VERTS * ELEM_PER_NORM] GetNormals(bool normalize)
{
    glm::vec3 normal = glm::vec3(1.f, 1.f, 1.f);

    if (normalize)
        normal = glm::normalize(normal);

    return {-normal.x, -normal.y, -normal.z, // Back
            -normal.x, normal.y, -normal.z,
            normal.x, normal.y, -normal.z,
            normal.x, -normal.y, -normal.z,

            -normal.x, -normal.y, normal.z, // Front
            -normal.x, normal.y, normal.z,
            normal.x, normal.y, normal.z,
            normal.x, -normal.y, normal.z};
}

我还得到另外两个错误:输入结束时“预期'}'和输入结束时预期的非限定id”。那两个人把我发送到我的源代码.cpp而不是我之前的代码所在的头文件源。它将我发送给一个没有错误的函数(void DrawBuffers :: InitVboIbo(){})。

谢谢! :)

编辑:

这是我的新代码:

constexpr std::array<GLfloat, NUM_VERTS * ELEM_PER_NORM> GetNormals(bool normalize)
{
    glm::vec3 normal = glm::vec3(1.f, 1.f, 1.f);

    if (normalize)
        normal = glm::normalize(normal);

    std::array<GLfloat, NUM_VERTS * ELEM_PER_NORM> res =
          {{-normal.x, -normal.y, -normal.z, // Back
            -normal.x, normal.y, -normal.z,
            normal.x, normal.y, -normal.z,
            normal.x, -normal.y, -normal.z,

            -normal.x, -normal.y, normal.z, // Front
            -normal.x, normal.y, normal.z,
            normal.x, normal.y, normal.z,
            normal.x, -normal.y, normal.z}};

    return res;
}

const static GLfloat normals[NUM_VERTS * ELEM_PER_NORM] = GetNormals(true);

1 个答案:

答案 0 :(得分:1)

为了从constexpr函数返回数组,您应该使用std::array之类的std::array<GLfloat, NUM_VERTS * ELEM_PER_NORM>。你不能返回std::vector因为它有非constexpr构造函数,你不能返回指向本地数组的指针,因为它们被破坏了,你不能创建静态const数组,因为它必须根据函数参数而不同。