2017-02-25 2 views
0

Ich bin ziemlich neu in C++, und ich versuche, einen einfachen Trie zu implementieren, um ein Lexikon von Zeichenfolgen zu speichern, mit der Std :: Map oder anderen C++ Standardbibliothek Container-Klassen. Was ich möchte in der Lage sein zu tun, etwas verwenden wieSelbstreferenzieller Typdef ohne Objekt oder Struktur

typedef (map<char, type_node>)* type_node; 

für die Klirren ++ gibt mir den Fehler ‚Verwendung von nicht deklarierter Bezeichner‚type_node‘‘.

Dies im Gegensatz zu einer selbstbezogenen Struktur, wie

typedef struct node { 
    int data; 
    struct node *next; 
} Node; 

die gut arbeitet, irgendwie.

Ist es möglich, selbstreferentielle Typen zu deklarieren, ohne eine Klasse oder Struktur zu verwenden?

Warum funktioniert die Struktur und nicht der rekursive Alias-Typ?

Gibt es einen besseren Weg, dies zu tun?

+1

Nope. Ein Typdef ist ein Alias. Aliase können nicht nach vorne deklariert werden. –

+1

Beiseite: "Objektorientierung" ist kein Synonym für "verwendete eine Klasse/Struktur". – Hurkyl

+1

Nein, das Typsystem muss grundsätzlich fundiert sein. –

Antwort

0

Sie können keine Container mit unvollständigen Typen [1] deklarieren. So ist map<char, type_node> ein Fehler und folglich ist der Alias ​​auch ein Fehler.

In C++ sind alle Strukturen implizit typedef '[2].

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

Links:: Ihre Struktur kann vereinfacht werden

  1. Are C++ recursive type definitions possible, in particular can I put a vector<T> within the definition of T?

  2. Difference between 'struct' and 'typedef struct' in C++?

+0

Der Nachteil des gezeigten 'struct node' ist, dass die Mapping-Funktionen nicht automatisch hinzugefügt werden. –

+0

Hmm, was ist mit 'struct node {map ptr;}' –

Verwandte Themen