C - 无效使用非左值数组

min*_*old 7 c opengl

我有一个矩阵结构:

typedef struct Matrix
{
    float m[16];
} Matrix;
Run Code Online (Sandbox Code Playgroud)

当我尝试调用此函数时:

memcpy(m->m, MultiplyMatrices(m, &translation).m, sizeof(m->m));
Run Code Online (Sandbox Code Playgroud)

我在编译时遇到错误说:

错误:无效使用非左值数组

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));
Run Code Online (Sandbox Code Playgroud)

caf*_*caf 8

返回值MultiplyMatrices()不是左值(类似于任何函数的返回值),这意味着您无法获取其地址.评估数组(包括结构的数组成员)隐式地获取第一个元素的地址,因此您不能这样做.

但是,您可以使用包含的简单赋值struct:

*m = MultiplyMatrices(m, &translation);
Run Code Online (Sandbox Code Playgroud)

只要你struct只包含你所显示的一个元素,这就完全一样了.