gpt4 book ai didi

C - 非左值数组的无效使用

转载 作者:太空狗 更新时间:2023-10-29 17:10:15 24 4
gpt4 key购买 nike

我有一个矩阵结构:

typedef struct Matrix
{
float m[16];
} Matrix;

当我尝试调用这个函数时:

memcpy(m->m, MultiplyMatrices(m, &translation).m, sizeof(m->m));

我在编译时收到一条错误消息:

error: invalid use of non-lvalue array

MultiplyMatrices 返回一个矩阵。

如果我使用 gcc 将文件编译成一个对象,我只会得到这个错误,如果我使用 g++ 编译对象,我不会出错。

我什至不确定错误是什么意思,我感觉它与存储在 MultiplyMatrices 返回的矩阵中的数组有关。

如果您需要查看更多代码,请告诉我。

此代码来自本教程:OpenGL Book Chapter 4

附注我想保持此代码严格的 iso/ansi,如果没有其他解决方案,那么我将不得不处理它。

编辑:我最终创建了一个临时矩阵,然后复制了数组。

Matrix tempMatrix;

...

tempMatrix = MultiplyMatrices(m, &translation);
memcpy(m->m, tempMatrix.m, sizeof(m->m));

最佳答案

MultiplyMatrices() 的返回值不是左值(就像任何函数的返回值一样),这意味着您不能获取它的地址。对数组(包括结构的数组成员)求值会隐式获取第一个元素的地址,因此您不能这样做。

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

*m = MultiplyMatrices(m, &translation);

只要您的 struct 只包含您显示的一个元素,这就完全一样。

关于C - 非左值数组的无效使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6645624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com