2016-11-23 5 views
-1
typedef struct Sym_item{ 
         char  *name;      
         symbolType  type;    
         char   *data;      
         bool    fce;       
         TList   *args;     
         bool    init; 
         tHTable   *ptr_loctable; // .. this is conflicting 
         char   *class_name;     
         bool    isstatic;     
         struct Sym_item *nextptr; 
}iSymbol; 


typedef struct Hash_table{ 
         iSymbol   *ptr; 
}Hash_item; 


typedef Hash_item tHTable[Hash_table_size]; // .............. this is conflicting 

I enthält bin mit dieser Struktur iSymbol die eine tHTable enthält, die in letzter Zeit definiert ist, aber ich brauche es, dass auch die Anordnung der Symbole als dieser Struktur enthält.Struktur enthalten Element, das Array gleichen Strukturen

Dies sagt Compiler:

error: unknown type name ‘tHTable’<br> 
    tHTable *ptr_loctable; 
+0

@StoryTeller: Tipp: C ist nicht C++. –

+0

@BodoThiesen Tipp: Vorwärtsdeklarationen funktionieren ziemlich gleich. – StoryTeller

+0

Peter, ich auch zweite, was Bodo in seiner Antwort erwähnt. Tippe nicht alles ein. Deine 'struct's sind eine schwere Sache, und ich abonniere die [Schule des Gedankens, dass es im Code hervortreten sollte] (http://yarchive.net/comp/linux/typedefs.html). – StoryTeller

Antwort

0

Sie sollten vorwärts Deklarationen verwenden.

Bevor Sie iSymbol Strukturdeklaration, erklären die andere Struktur:

struct tHTable; 

Sie haben noch alle seine Eigenschaften zu schreiben, da dies nur eine Vorwärtsdeklaration ist.

+0

tHTable ist keine Struktur –

1

Überlegen Sie nicht, typedef überhaupt zu verwenden.

Wenn Sie wirklich typedef s verwenden möchten, sollten Sie die Definition der struct s und typedef s unabhängig, etwa so:

struct a { ... }; [...] typedef struct a a_t; 

Bei Vorwärts-Erklärungen, dass Sie hier benötigen, müssen Sie diese Spaltung tun sowieso.

struct Hash_table; 

struct Sym_item { 
    char *name; 
    symbolType type; 
    char *data; 
    bool fce; 
    TList *args; 
    bool init; 
    Hash_item *ptr_loctable[Hash_table_size]; 
    char *class_name; 
    bool isstatic; 
    struct Sym_item *nextptr; 
}; 

struct Hash_table { 
    struct Sym_item *ptr; 
}; 

typedef struct Sym_item iSymbol; 
typedef struct Hash_table Hash_item; 
typedef Hash_item tHTable[Hash_table_size]; 
Verwandte Themen