没有对象或结构的自引用typedef

时间:2017-02-25 02:25:16

标签: c++

我对c ++很新,我正在尝试使用std :: map或其他c ++标准库容器类来实现一个简单的trie来存储字符串的词典。我希望能够做的是使用像

这样的东西
typedef (map<char, type_node>)* type_node;

clang ++给我错误'使用未声明的标识符“type_node”'。

这与自引用结构相反,例如

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

以某种方式工作正常。

是否可以在不使用类或结构的情况下声明自引用类型?

为什么结构有效而不是递归别名类型?

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您无法声明类型不完整的容器[1]。所以map<char, type_node>是一个错误,因此别名也是一个错误。

在C ++中,所有结构都是隐式的typedef&#39; 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++?