Je reçois l'erreur lvalue invalide en utilisant gcc 3.4.6. La ligne qui appelle l'erreur a une fonction qui reçoit un pointeur sur SetElement (typedef void*
). J'essaye de réaliser ceci en utilisant le moulage d'un autre type (également typedef void*
) de la façon suivante: &((SetElement)my_var)
. gcc se plaint à ce sujet. Une idée de ce qui peut être fait?Lvalue invalide liée au moulage dans unary &
1
A
Répondre
3
Vous prenez l'adresse d'un temporaire (un rvalue
), ce qui ne peut pas être fait. C'est comme essayer de le faire:
&(2+2)
// or
&4
// or
&(my_ptr + 4)
Vous pouvez créer vous-même temporaire (donc un lvalue
), en utilisant une des deux méthodes:
AnotherType **my_var_ptr = &my_var;
SetElement **set_element_ptr = (SetElement *)my_var_ptr;
// or
SetElement *set_element = (SetElement)my_var;
SetElement **set_element_ptr = &set_element;
Ou vous pouvez simplement exprimés d'une manière différente (solution):
SetElement **set_element_ptr = (SetElement *)&my_var;
Cela fonctionne parce que vous prenez l'adresse de my_var
(un lvalue
), et non de (un rvalue
).
Questions connexes
- 1. Comment créer une association Unary dans CakePhp?
- 2. Dimensionnement de la fenêtre liée au contenu
- 3. Aucune session Hibernate liée au thread
- 4. Lvalue de liaison à une référence
- 5. liaison temporaire à une référence lvalue
- 6. "données au niveau racine est invalide" avec LoadXml
- 7. CXF IllegalAnnotationException liée au constructeur sans-argument StackTraceElement
- 8. Chaîne étrange concaténée liée au symbole arabe C#
- 9. Délégué générique ou problème de moulage générique
- 10. Entités de structure d'entité de moulage dans la direction «incorrecte»
- 11. Moulage non valide lors de l'entrée
- 12. Méthode de moulage de type générique (.Net)
- 13. Problème d'encodage invalide cElementTree
- 14. Modification de la taille d'une colonne référencée par une vue liée au schéma dans SQL Server
- 15. Objet de moulage à une classe spécifique en IL?
- 16. WebResource.axd - ViewState invalide
- 17. CS0016: Erreur d'annuaire invalide
- 18. Python: Token invalide
- 19. Valeur invalide pour size_t
- 20. opérateur arithmétique invalide
- 21. Enregistrement d'une liste liée
- 22. Wpf Liaison de données avec IMultiValueConverter et erreurs de moulage
- 23. Linq + terme d'expression invalide '>'
- 24. python Littéral invalide pour float
- 25. html invalide (étiquette cible href)
- 26. Filtrage sur table liée dans Axapta/Dynamics Axe
- 27. Pourquoi j'obtiens une erreur d'adresse invalide 5.5.4?
- 28. erreur d'index invalide en javascript
- 29. subsonic générer invalide requête JOIN
- 30. 'Element' est un XmlNodeType invalide
Pourquoi est-ce une adresse temporaire? Et n'y a-t-il pas un moyen de le faire directement? –
C'est temporaire parce que vous prenez une lvalue et la lancez, en la transformant en valeur. & attend une lvalue. Vous pouvez penser à lvalue et à rvalue comme parties gauche et droite d'une affectation. Voir mes exemples - & est toujours utilisé sur une lvalue. – strager
En outre, je ne pense pas qu'il existe un moyen de le faire directement sans un temporaire. Si vous prenez l'adresse d'un temporaire, le temporaire sera détruit et votre pointeur sera invalide (pointant vers rien d'utile, indéfini). – strager