C – utilisation non valide d’un tableau autre que lvalue

J’ai une structure masortingcielle:

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

Lorsque j’essaie d’appeler cette fonction:

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

Je reçois une erreur au moment de la compilation en disant:

erreur: utilisation non valide d’un tableau autre que lvalue

MultiplyMasortingces renvoie une masortingce.

Je ne reçois cette erreur que si j’utilise gcc pour comstackr le fichier dans un object, si j’utilise g ++ pour comstackr l’object, je ne reçois aucune erreur.

Je ne sais même pas ce que l’erreur signifie, j’ai l’impression que cela a à voir avec le tableau stocké dans la masortingce renvoyée par MultiplyMasortingces.

Si vous avez besoin de voir plus de code, faites le moi savoir.

Ce code est issu de ce tutoriel: OpenGL Book Chapter 4

ps je voudrais garder ce code ssortingct iso / ansi, s’il n’y a pas d’autre solution cependant, alors je devrai simplement m’en occuper.

EDIT: J’ai fini par créer une masortingce temporaire puis copier le tableau.

 Masortingx tempMasortingx; ... tempMasortingx = MultiplyMasortingces(m, &translation); memcpy(m->m, tempMasortingx.m, sizeof(m->m)); 

La valeur de retour de MultiplyMasortingces() n’est pas une lvalue (comme la valeur de retour de toute fonction), ce qui signifie que vous ne pouvez pas prendre son adresse. L’évaluation d’un tableau (y compris un membre du tableau d’une structure) prend implicitement l’adresse du premier élément, vous ne pouvez donc pas le faire.

Vous pouvez cependant utiliser une simple affectation de la struct contenant:

 *m = MultiplyMasortingces(m, &translation); 

Tant que votre struct ne contient que le seul élément que vous avez montré, c’est exactement la même chose.