I have a matrix struct:
typedef struct Matrix
{
float m[16];
} Matrix;
When I try to call this function:
memcpy(m->m, MultiplyMatrices(m, &translation).m, sizeof(m->m));
I get an error at compile time saying:
error: invalid use of non-lvalue array
MultiplyMatrices returns a Matrix.
I only get this error if I use gcc to compile the file into an object, if I use g++ to compile the object I get no error.
I am not even sure what the error means, I have a feeling it has to do with the array stored in the Matrix returned by MultiplyMatrices.
If you need to see more code let me know.
This code is from this tutorial: OpenGL Book Chapter 4
p.s. I would like to keep this code strict iso/ansi, if there is no other solution however, then I'll just have to deal with it.
EDIT: I ended up going with creating a temporary Matrix then copying the array.
Matrix tempMatrix;
...
tempMatrix = MultiplyMatrices(m, &translation);
memcpy(m->m, tempMatrix.m, sizeof(m->m));
The return value of MultiplyMatrices()
is not an lvalue (like the return value of any function), which means that you can't take its address. Evaluating an array (including an array member of a structure) implicitly takes the address of the first element, so you can't do that.
You can, however, use simple assignment of the containing struct
:
*m = MultiplyMatrices(m, &translation);
As long as your struct
only contains the one element as you have shown, this is exactly the same.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With