Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Cast fra due puntatori a strutture diverse.
Forum - C/C++ - Cast fra due puntatori a strutture diverse.

Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 17:22
Martedì, 27/09/2011
Ciao a tutti!

Ho due strutture definite così:

Codice sorgente - presumibilmente C++

  1. typedef struct _graphics_element {
  2.         SDL_Surface *graphic;
  3.         int posx;
  4.         int posy;
  5.         int type;
  6.     } graphic_element;
  7.    
  8.     typedef struct _button {
  9.         graphic_element *ge;
  10.         GString *text;
  11.         SDL_Surface *graphics;
  12.         int posx;
  13.         int posy;
  14.         gboolean(*click)();
  15.         gboolean(*mouse_enter)();
  16.         gboolean(*mouse_exit)();
  17.     } button;



ed utilizzo questo metodo per avere un puntatore alla prima struttura dalla seconda:

Codice sorgente - presumibilmente Plain Text

  1. graphic_element *ge = (graphic_element*) g_list_nth_data(mobj->gm->elements, i);



dove g_list_nth_data() mi ritorna un puntatore ad una struttura button.

Come mai se i valori contrnuti nella struttura ge non corrispondo a prima del cast?

Grazi mille!!

ciaociao

PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 18:26
Martedì, 27/09/2011
Sei sicuro che

"g_list_nth_data() mi ritorna un puntatore ad una struttura button"

??

Da quello che so g_list_nth_data() restituisce un puntatore void (e quindi da determinare chiamata per chiamata)

Ultima modifica effettuata da nessuno il 27/09/2011 alle 18:27
grazie ma ho risolto, graphic_element *ge, doveva essere graphic_element ge... - tasx - 27/09/11 20:15
La soluzione non è mica chiara ... comunque ... - nessuno - 27/09/11 20:21
perchè facendo il cast da un puntatore ad una struttura lui la riempiva solo con i 4 byte del punyatore, invece facendo o il cast da struttura a struttura, cmq vedi qui: http://stackoverflow.com/questions/3766229/casting-one-struct-pointer-to-other-c - tasx - 27/09/11 21:13
Continua a non apparire corretto. La funzione restituisce un puntatore e un puntatore devi usare. Comunque, se per te va bene ... magari ci risentiremo con qualche errore in seguito ... - nessuno - 27/09/11 21:20
speriamo bene, ma è concettualmente sbagliato? - tasx - 27/09/11 21:40
Beh ... sì ... se la funzione restituisce un puntatore non puoi indicare diversamente nella variabile che assegni. Il compilatore ti dovrebbe dare un errore ... - nessuno - 27/09/11 21:42


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM