[C] Chiarimento su typedef

porcellins1212
Da un tema d'esame:

typedef struct Room { Albergo * albergo; 
                                 int numero; 
                                 char doppiaOSingola; /* assume il valore ‘d’ se doppia, ‘s’ se singola */ 
                                 struct Room * next; } Stanza;
typedef Stanza * Stanze;

typedef struct Hotel { char * nome; 
                                char * indirizzo; 
                                char * citta; 
                                int numSingole; 
                                int numDoppie; 
                                Stanze s; /* lista delle stanze dell’hotel */ 
                                struct Hotel * next; } Albergo;
typedef Albergo * Alberghi;


Non capisco il puntatore
Albergo * albergo
nella prima struct. Che senso ha metterlo prima che sia stato definito il tipo Albergo? Anche il compilatore mi dà errore... :(

[OT] Sapete consigliarmi un buon compilatore? Attualmente uso il DevC++, ma non mi soddisfa più di tanto :? [/OT]

Risposte
hamming_burst
Ciao,
semplicemente c'è un paradosso di dichiarazioni.
Penso hai due possibili soluzioni:
- il docente si è sbagliato, e seguendo il modello scritto lui intendeva scrivere Albergo nella struct Stanza nella sua estensione, perciò:

    typedef struct Room { struct Hotel * albergo;
                                     int numero;
                                     char doppiaOSingola; /* assume il valore ‘d’ se doppia, ‘s’ se singola */
                                     struct Room * next; } Stanza;
    typedef Stanza * Stanze;


- stravolgi completamente i tipi, scrivendo anche la fase di dichiarazione:

struct Room;
struct Hotel;

typedef struct Room Albergo;
typedef Albergo* Alberghi;

typedef struct Hotel Stanza;
typedef Stanza * Stanze;

struct Hotel{ 
	Alberghi albergo;
	int numero;
	char doppiaOSingola; /* assume il valore ‘d’ se doppia, ‘s’ se singola */
	Alberghi next; 
};


struct Room{ 
	char * nome;
	char * indirizzo;
	char * citta;
	int numSingole;
	int numDoppie;
	Stanze s; /* lista delle stanze dell’hotel */
	Stanze next; 
};

che ti sconsiglio nella fase di definizione. Penso che la prima versione sia quella che il docente aveva in mente.

Per DevC++ ti rimando ad uno dei millemila consigli che abbiamo dato in fatto di questo IDE+compilatore nella sezione, un es. questo. Cambia semplicemente usa gcc+emacs per linux o Code::Blocks per Windows, NetBeans es. è multipiattaforma, quest'ultimi sono IDE con all'interno un compilatore aggiornato.

Rggb1
"hamming_burst":
Penso che la prima versione sia quella che il docente aveva in mente.

Direi anch'io, magari chiedi conferma.

porcellins1212
Grazie per le risposte, ho modificato seguendo il primo suggerimento. Chiederò conferma, ma così sembra funzionare.
Grazie anche per il compilatore. DevC++ è cestinato ormai :D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.