2017-02-25 42 views
0

我對C++相當陌生,並且試圖使用std :: map或其他C++標準庫容器類來實現一個簡單的trie來存儲字符串的詞典。我希望能夠做的就是使用類似沒有對象或結構的自引用typedef

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

爲此鐺++給我的錯誤「使用未聲明的標識符‘type_node’的」。

這相對於一個自我指涉的結構,如

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

工作正常,不知何故。

是否可以在不使用類或結構的情況下聲明自引用類型?

爲什麼結構工作而不是遞歸別名類型?

有沒有更好的方法來做到這一點?

+1

都能跟得上。 typedef是別名。別名不能提前宣佈。 –

+1

另外:「對象方向」不是「使用類/結構」的同義詞。 – Hurkyl

+1

不,基本上,類型系統需要有根據。 –

回答

0

您不能聲明容器類型不完整[1]。所以map<char, type_node>是一個錯誤,因此別名也是一個錯誤。

在C++中,所有的結構都是隱式的typedef'd [2]。您的結構可以簡化爲:

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

鏈接:

  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

顯示'struct node'的缺點是您沒有自動添加映射工具。 –

+0

嗯'struct node {map ptr;}' –