【发布时间】:2020-06-23 01:37:37
【问题描述】:
上下文:需要将TestTextures3SpriteObj s1中的verts设置到verts1数组中。给我一个错误“表达式必须是可修改的左值”。复制完成后,顶点将作为缓冲区数据发送到 GPU,使用 OpenGL 和 GLUT。
仅包含相关的代码摘录
#pragma once
class TestTextures3SpriteObj
{
public:
int spriteid;
int vao;
int texid;
float verts[];
};
const float verts1[] = { 0.5 ,0.5, 0.0, 0.9, 0.5, 0.3, 0.0, 1.0, 0.0,
0.5, -0.5, 0.0, 0.3, 0.3, 0.9, 1.0, 1.0, 1.0,
-0.5, -0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0,
-0.5, 0.5, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
TestTextures3SpriteObj s1;
s1.verts = verts1;
【问题讨论】:
-
不,您不能分配 c 数组,但可以分配 c++ 数组。 std::array 是可赋值的。
-
float verts[];不合法c++ -
警告:
float verts[];看起来是 flexible array member。 C++ 中的非标准。 -
您可能需要打开更多警告,以便您的编译器通知您这些事情。
-
仅仅因为它编译并不意味着它是一个好主意。标准 C++ 要求数组具有编译时常量大小。远离非标准可变长度数组扩展的原因有很多。