在C ++中定义struct时使用struct本身

时间:2014-04-15 06:07:03

标签: c++ arrays flexible-array-member

我想在C ++中实现一个简单的树结构,比如:

struct node{
    ....
    node* parent;
    node[]* children;
    ....
};

但是编译器报告了一个错误(包括CLang ++和G ++)

error: expected unqualified-id before '[' token
node[]* child;
    ^

error: expected ',' or '...' before '*' token
node(node[]* c): : child = c; {}
           ^

类似这样的事情

顺便说一下,我使用-std = c ++ 11标志来表示某些C ++ 11功能

任何帮助都是适当的

2 个答案:

答案 0 :(得分:2)

struct的大小是编译时常量。如果给出size to be determined later数组,则表示错误。要么给出一些大小(对于ex 2,如果是二叉树)或使用pointer to node *来存储数组或指针(子)或使用一些内置容器(对于ex std :: vector,std :: array)

答案 1 :(得分:0)

node[]* children;不是合法的C ++语法。如果最大 在编译时已知孩子的数量,你可以写:

node* children[maxChildren];

否则:

std::vector<node*> children;

会做到这一点。如果maxChildren很大或可变,那么你 无论如何可能想要使用这个表格。另一方面,如果 maxChildren为2,您可能只想声明两个指针:

node* leftChild;
node* rightChild;
相关问题