在C+中的结构定义中使用结构本身+; 我想在C++中实现一个简单的树结构,比如: struct node{ .... node* parent; node[]* children; .... };

在C+中的结构定义中使用结构本身+; 我想在C++中实现一个简单的树结构,比如: struct node{ .... node* parent; node[]* children; .... };,c++,arrays,flexible-array-member,C++,Arrays,Flexible Array Member,但是编译器报告了一个错误(CLang++和G++) 像这样的 ,我用-STD= C++ 11标志来显示一些C++ 11特性< /P> 任何帮助都将被告知结构的大小是编译时常量。如果您给出的数组的大小将在以后确定,则这是一个错误。给定一些大小(对于二叉树的ex 2),或者使用指向节点的指针*来存储数组或指针(子对象),或者使用一些内置容器(对于ex std::vector,std::array)节点[]*子对象不是合法的C++语法。如果最大 编译时已知子级的数量,您可以编写: node* chil

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

像这样的

,我用-STD= C++ 11标志来显示一些C++ 11特性< /P>


任何帮助都将被告知

结构的大小是编译时常量。如果您给出的数组的大小将在以后确定,则这是一个错误。给定一些大小(对于二叉树的ex 2),或者使用指向节点的指针*来存储数组或指针(子对象),或者使用一些内置容器(对于ex std::vector,std::array)

节点[]*子对象不是合法的C++语法。如果最大
编译时已知子级的数量,您可以编写:

node* children[maxChildren];
否则:

std::vector<node*> children;

看起来不错。为什么不试试
向量子项
?“编译器报告了一个错误”-继续,给我们一个线索…你可能想要节点*子项[一些常量大小];至少应该粘贴错误…
node[]*
是一个语法错误(不管
node
是什么)。实际上,未指定大小的数组在C99中被标准化为IIRC,但我不知道它们是否被制成了C++11。真正的问题是这样一个数组必须是结构的最后一个成员(这可能不是OP想要的)。谢谢!然后我就可以包含std::vector并用它来包装,对吗?@MatteoItalia未指定大小的数组仅为C(在C++中不允许)@MatteoItalia数组实际上是结构中的最后一个成员,后面有三个构造函数,什么都没有eles@Z.Shang不,这是一种误解。很多C++代码是C++的有效代码,但是C++不是C的超级集合。
std::vector<node*> children;
node* leftChild;
node* rightChild;