我收到了一个不合规定的错误:在'['令牌之前预期的非限定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);
答案 0 :(得分:1)
为了从constexpr函数返回数组,您应该使用std::array
之类的std::array<GLfloat, NUM_VERTS * ELEM_PER_NORM>
。你不能返回std::vector
因为它有非constexpr构造函数,你不能返回指向本地数组的指针,因为它们被破坏了,你不能创建静态const数组,因为它必须根据函数参数而不同。