Trasmissione di valori non validi correlati in unario & amp;
Domanda
Ricevo l'errore lvalue non valido usando gcc 3.4.6. La riga che richiama l'errore ha una funzione che riceve un puntatore a SetElement (che è typedef void *
). Sto cercando di ottenere questo risultato usando il casting di un altro tipo (anche typedef void *
) nel modo seguente: & amp; ((SetElement) my_var)
. gcc si lamenta di questo. Qualche idea di cosa si possa fare?
Soluzione
Stai prendendo l'indirizzo di un temporaneo (un rvalue
), che non può essere fatto. È come provare a fare:
&(2+2)
// or
&4
// or
&(my_ptr + 4)
Puoi creare tu stesso un temporaneo (quindi un lvalue
), usando uno dei due metodi:
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;
Oppure puoi semplicemente trasmettere in modo diverso ( soluzione ):
SetElement **set_element_ptr = (SetElement *)&my_var;
Funziona perché stai prendendo l'indirizzo di my_var
(un lvalue
) e non di (SetElement) my_var
(un < code> rvalue ).