C - 无效使用非左值数组

时间:2011-07-11 03:58:04

标签: c opengl

我有一个矩阵结构:

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));

1 个答案:

答案 0 :(得分:8)

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

但是,您可以使用包含struct的简单分配:

*m = MultiplyMatrices(m, &translation);

只要您的struct仅包含您所显示的一个元素,就会完全相同。