Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C] liste e code

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    220

    [C] liste e code

    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!!!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [C] liste e code

    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;
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    220
    si lo so che in C si possono creare strutture dinamiche... era solo che non sapevo più dove andare a parare

    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:
    codice:
    // 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

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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.

    Puoi fare:

    codice:
    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:
    codice:
    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Lo stesso vale per enum devi mettere un typedef.
    Ci sono 10 tipi di persone al mondo, chi conosce il sistema binario e chi no.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    220
    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?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.