C – 无效使用非左值数组
我有一个矩阵结构:
typedef struct Matrix { float m[16]; } Matrix;
当我尝试调用此函数时:
memcpy(m->m, MultiplyMatrices(m, &translation).m, sizeof(m->m));
我在编译时遇到错误说:
错误:无效使用非左值数组
MultiplyMatrices返回一个矩阵。
如果我使用gcc将文件编译成对象,我只会得到此错误,如果我使用g ++编译对象我没有错误。
我甚至不确定错误意味着什么,我感觉它与存储在MultiplyMatrices返回的Matrix中的数组有关。
如果您需要查看更多代码,请告诉我们。
此代码来自本教程: OpenGL Book第4章
ps我想保持这段代码严格iso / ansi,如果没有其他解决方案,那么我只需处理它。
编辑:我最终创建一个临时矩阵然后复制数组。
Matrix tempMatrix; ... tempMatrix = MultiplyMatrices(m, &translation); memcpy(m->m, tempMatrix.m, sizeof(m->m));
MultiplyMatrices()
的返回值不是左值(如任何函数的返回值),这意味着您无法获取其地址。 评估数组(包括结构的数组成员)隐式地获取第一个元素的地址,因此您不能这样做。
但是,您可以使用包含struct
简单赋值:
*m = MultiplyMatrices(m, &translation);
只要您的struct
只包含您显示的一个元素,这就完全相同。