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