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只包含您显示的一个元素,这就完全相同。