PDA

Visualizza la versione completa : [C] liste e code


stirkland
07-06-2007, 11:24
ciao gente, pare che in C non si possano fare strutture dinamiche come liste, code e alberi!!! ma non è possibile!!!

typedef struct {
int val;
node *next;
} node;

non mi compila!!!!! mi dice:
error: parse error before "node"
warning: no semicolon at end of struct or union
warning: data definition has no type or storage class

se però rinomino il file da .C a .CPP allora compila!!!

non so più dove sbattere la testa!!! :cry:

andbin
07-06-2007, 11:50
Originariamente inviato da stirkland
pare che in C non si possano fare strutture dinamiche come liste, code e alberi!!!Assolutamente falso.
Non sono facili/banali da implementare come in altri linguaggi (Java ad esempio) ma sono fattibili.


Originariamente inviato da stirkland
typedef struct {
int val;
node *next;
} node;

non mi compila!!!!!
typedef struct _node {
int val;
struct _node *next;
} node;

stirkland
07-06-2007, 12:39
si lo so che in C si possono creare strutture dinamiche... era solo che non sapevo più dove andare a parare :zizi:

quello che ho postato era solo un esempio ma già adesso non capisco una cosa:
se voglio creare una variabile (in altri linguaggi sarebbe un oggetto) per poter utilizzare sta benedetta lista come dovrei fare?

node *list;

oppure

_node *list;
???

cmq a sto punto posto il codice che mi interessa veramente:


// Tipo di dato che identifica il senso di marcia.
enum {
on_left,
on_right
} tGearWay;

// Tipo di dato che identifica le categorie di treni.
enum {
freight, // merci.
intercity,
regional
} tCategory;

// Tipo di dato che identifica il treno.
typedef struct {
WINDOW *win;
tCategory type;
tGearWay way;
pthread_cond_t gone;
pthread_cond_t arrived;
} tTrain;

// Tipo di dato che identifica il garage del controllore.
typedef struct tBox *tGarage;
typedef struct {
tTrain train;
tGarage next;
} tBox;


// Tipo di dato che identifica il controllore di una tratta ferroviaria.
typedef struct {
sem_t semaphore;
int trade;
tGarage garage;
} tController;


e mi dice:

error: parse error before "tCategory"
treni.c:46: warning: no semicolon at end of struct or union
treni.c:47: warning: data definition has no type or storage class
treni.c:50: error: parse error before '}' token
treni.c:50: warning: data definition has no type or storage class
treni.c:55: error: parse error before "tTrain"
treni.c:55: warning: no semicolon at end of struct or union
treni.c:57: error: parse error before '}' token
treni.c:57: warning: data definition has no type or storage class

andbin
07-06-2007, 12:52
Originariamente inviato da stirkland
quello che ho postato era solo un esempio ma già adesso non capisco una cosa:
se voglio creare una variabile (in altri linguaggi sarebbe un oggetto) per poter utilizzare sta benedetta lista come dovrei fare?

node *list;

oppure

_node *list;
???Ne avevo già parlato in un vecchio thread ... ma non ho voglia di cercarlo. :zizi:

Puoi fare:


struct node {
int valore;
struct node *next;
};

e in questo caso in C devi fare:
struct node pippo;

mentre in C++ puoi fare anche solo:
node pippo;

Se usi typedef:

typedef struct node {
int valore;
struct node *next;
} NODE;

Puoi fare esattamente come prima con in più, in qualunque caso:
NODE pippo;

La differenza nel C++ è che la definizione di una struct crea già un nuovo tipo di dato, a cui ci si può riferire senza mettere 'struct'. In "C" no.

bigmickey
07-06-2007, 13:12
Lo stesso vale per enum devi mettere un typedef.

stirkland
07-06-2007, 14:29
ehm no scusate se rompo ma non capisco come fare: ho tolto/messo 1000 volte struct, typedef ecc..ma non va!!

mi modificate voi il mio pezzettone di codice? :stordita:

Loading