Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156

    [C] Errore definizione strutture

    Sono in fase di dichiarazione delle strutture dati e sto lavorando su 4 files che vi posto:

    Info.h :
    codice:
    //sono le info del tree
    #include "list.h"
    
    #ifndef INFO_H
    #define INFO_H
    
    
    typedef char* Type_Key_Tree;
    
    
    struct S_Sat_Tree
    {
        char Razza[15];
        float Peso;
        int Croccantini;
        Type_List accoppiamenti;
    };
    typedef struct S_Sat_Tree Type_Sat_Tree;
    
    
    struct S_Info_Tree
    {
        Type_Key_Tree Key;
        Type_Sat_Tree Satellite;
    };
    typedef struct S_Info_Tree Type_Info_Tree;
    #endif
    Infolist.h
    codice:
    #ifndef INFOLIST_H
    #define INFOLIST_H
    
    typedef char* Type_Key_List;
    
    
    struct S_Sat_List
    {
        char Sesso;
        int Volte;
    };
    typedef struct S_Sat_List Type_Sat_List;
    
    struct S_Info_List
    {
        Type_Key_List Key;
        Type_Sat_List Satellite;
    };
    typedef struct S_Info_List Type_Info_List;
    
    #endif
    list.h
    codice:
    #include "infolist.h"
    
    
    #ifndef LIST_H
    #define LIST_H
    struct S_List
    {
        Type_Info_List Info;
        struct S_List* Next;
    };
    typedef S_List Type_Node_List;
    typedef Type_Node_List* Type_list;
    #endif
    tree.h
    codice:
    #include "info.h"
    
    #ifndef TREE_H
    #define TREE_H
    struct S_Tree
    {
        Type_Info_Tree Info;
        struct S_Tree* Right;
        struct S_Tree* Left;
    };
    typedef struct S_tree Type_Node_Tree;
    typedef Type_Node_Tree* Type_Tree;
    
    #endif
    main.c
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include "list.h"
    #include "tree.h"
    
    int main()
    {
        
        return EXIT_SUCCESS;
        
    }
    In fase di compilazione ottengo i seguenti errori :
    3 C:\Users\Mario\Desktop\Traccia Semi_inventata\main.c In file included from main.c
    11 C:\Users\Mario\Desktop\Traccia Semi_inventata\list.h syntax error before "Type_Node_List"
    11 C:\Users\Mario\Desktop\Traccia Semi_inventata\list.h [Warning] data definition has no type or storage class
    12 C:\Users\Mario\Desktop\Traccia Semi_inventata\list.h syntax error before '*' token
    12 C:\Users\Mario\Desktop\Traccia Semi_inventata\list.h [Warning] data definition has no type or storage class
    4 C:\Users\Mario\Desktop\Traccia Semi_inventata\tree.h:1, from main.c In file included from tree.h:1, from main.c
    4 C:\Users\Mario\Desktop\Traccia Semi_inventata\main.c from main.c
    16 C:\Users\Mario\Desktop\Traccia Semi_inventata\info.h syntax error before "Type_List"
    16 C:\Users\Mario\Desktop\Traccia Semi_inventata\info.h [Warning] no semicolon at end of struct or union
    24 C:\Users\Mario\Desktop\Traccia Semi_inventata\info.h field `Satellite' has incomplete type
    C:\Users\Mario\Desktop\Traccia Semi_inventata\Makefile.win [Build Error] [main.o] Error 1

    ...che mi sembrava di aver capito fossero dovuti ad un uso di una struttura prima della dichiarazione, ma nel mio caso non riesco a capire dove sbaglio. Un aiuto?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Premetto che:
    1) questi header nell'insieme sono un lucas (ufficio complicazioni ...) vedi ridefinire i char *
    2) le nomenclature sono strambe, per i typedef si utilizza generalmente il suffisso "_t",
    mentre i nomi delle strutture (ma anche i nomi dei files)
    dovrebbero rispecchiare quello che rappresentano, se utilizzi nomi cosi' generici "list" "tree" "info"
    diventa dura seguire il filo (mentre poi le variabili sono specializzatissime tipo "croccantini")
    3) ifndef,define si mette all'inizio del file prima degli include

    il primo errore che mi salta all'occhio in list.h:

    typedef S_List Type_Node_List;
    mentre doveva essere
    typedef struct S_List Type_Node_List;

    Se, per iniziare, metti tutto in un unico file .h e dai alle strutture e ai typedef nomi più umani e rappresentativi
    diventa molto più facile debuggare, soprattutto per chi ti deve aiutare.

    Ciao.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Sono d'accordo sull'odiosità degli identificatori ma stavo lavorando su file non scritti da me!
    In ogni l'inghippo stava nella dichiarazione della struttura lista dove una volta veniva usata una "l" minuscola, un'altra volta maiuscola...Ti ringrazio per l'aiuto

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 © 2024 vBulletin Solutions, Inc. All rights reserved.