我有一个矩阵结构:
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)
返回值MultiplyMatrices()不是左值(类似于任何函数的返回值),这意味着您无法获取其地址.评估数组(包括结构的数组成员)隐式地获取第一个元素的地址,因此您不能这样做.
但是,您可以使用包含的简单赋值struct:
*m = MultiplyMatrices(m, &translation);
Run Code Online (Sandbox Code Playgroud)
只要你struct只包含你所显示的一个元素,这就完全一样了.