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?

È stato utile?

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 ).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top