对于C语言中一个结构体的typedef
,我不能这样做:
typedef struct {
unsigned id;
node_t *left;
node_t *right;
} node_t;
由于node_t
在定义之前无法确定,因此不能在其自身的定义中使用。 这有点像一个两难境地。 但是,我可以使用以下方法来创建所需的自引用类型:
typedef struct node_s node_t;
struct node_s {
unsigned id;
node_t *left;
node_t *right;
};
同样地,我想为一个引用自身的C++容器做类似的事情:
typedef pair<unsigned, pair<node_t *, node_t * > > node_t;
当然,编译器会抱怨在定义node_t
之前从未听说过它,就像上面的struct typedef
一样。
那么是否有类似于struct
的解决方法呢?或者有更好的方法吗?(不,我不想使用void
指针。)
struct node_t { node_t* left; node_t* right; };
完全没有问题。此外,std::pair
不是一个容器。 - juanchopanzapair
是一个“简单容器”。而且,我知道第一种情况在C++中不是问题,这就是为什么我用“在C中”澄清了一下。 - Mark Adler