Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453

    [C] problema con le strutture

    ciao ragazzi...

    (mi sa che il titolo non si è aggiornato, ho fatto un edit, scusate.)

    vi spiego il mio problema:
    codice:
    // file a
    #include<fileb.c>
    
    struct prova{
    int a;
    int b;
    };
    
    struct prova ccc[];
    
    int main(){
    ...
    }
    
    // file b
    
    extern struct prova ccc[]; (1)
    
    ...
    Ottento un errore alla riga (1):

    error: array type has incomplete element type
    dove sbaglio?

    grazie a tutti..

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    39
    non vorrei sbagliarmi ma forse in standard c devi dichiarare le dimensioni degli array o altrimenti invece di [] metti * così crei un puntatore che poi allocherai dinamicamente e che è sostanzialmente la stessa cosa!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Scusa un attimo, tu vuoi dichiarare un array di tipo struct prova nel file sorgente in "filea.c" dopo aver definito la struttura in questione e poi nel file sorgente fileb.c vuoi fare riferimento a questo array globale? Se è così, è ovvio che non vada perché hai utilizzato una direttiva include per includere un file sorgente .c. Tra l'altro, stai compilando solo filea.c? Quando vai a compilare, il preprocessore esegue le direttive include e il tuo filea.c si trasforma in

    codice:
    extern struct prova ccc[];
    
    struct prova{
    int a;
    int b;
    };
    
    struct prova ccc[];
    
    int main(){
    ...
    }
    che giustamente non potrebbe mai essere compilato senza errore perché alla prima riga stai facendo riferimento ad una variabile esterna di tipo struct prova che non hai ancora definito (visto che lo fai nelle righe di sotto). Se vuoi fare una cosa del genere devi realizzare un header file in cui metterci la dichiarazione della struct e poi includerlo in entrambi i file sorgenti.

    codice:
    /* header.h */
    
    struct prova {
    	int a;
    	int b;
    };
    codice:
    /* filea.c */
    
    #include "header.h"
    
    struct prova ccc[];
    
    int main(){
    ...
    }
    codice:
    /* fileb.c */
    
    #include "header.h"
    
    extern struct prova ccc[];
    Chiaramente l'header file deve stare nella stessa directory dei sorgenti, a meno che tu non lo scriva nella directory predefinita degli header file del tuo compilatore, caso in cui devi sostituire " " con < >

    non vorrei sbagliarmi ma forse in standard c devi dichiarare le dimensioni degli array o altrimenti invece di [] metti * così crei un puntatore che poi allocherai dinamicamente e che è sostanzialmente la stessa cosa!
    Questo è giusto ma non riguarda l'errore che aveva. Comunque sì, un array in C non si dichiara in quel modo, o almeno non è la maniera più corretta (e sensata).
    every day above ground is a good one

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    39
    solo per sapere...poi come compila questi 2 file?!

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Dipende da cosa usa. Un IDE? Dovrà creare un progetto, aggiungerci i due file e compilarlo per intero. Un compilatore da riga di comando come gcc? Basterà semplicemente

    codice:
    gcc filea.c fileb.c -o nome_eseguibile #eventuali altre opzioni
    every day above ground is a good one

  6. #6
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    grazie

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.