初始化包含自身向量的结构
|
我有一个要从常量数据初始化的菜单系统。
MenuItem
可以包含a1ѭ的向量作为子菜单。但这只能起到一定作用。这是问题的基本内容:
#include <vector>
struct S { std::vector<S> v ; } ;
S s1 = { } ;
S s2 = { { } } ;
S s3 = { { { } } } ;
g++ -std=c++0x
(版本4.4.5)处理s1
和s2
,但是s3
返回:
prog.cpp:6:22: error: template argument 1 is invalid
(请参阅ideone)。难道我做错了什么?
没有找到相关结果
已邀请:
3 个回复
陈獭
声明中,
仍不完整。类型必须完整才能用作STL容器中的值类型。有关更多信息,请参见Matt Austern的文章“标准库管理员:不完整类型的容器。” 如果您要切换到可用于不完整类型的容器,那么您的代码就可以了。例如,给出以下内容:
那么您的原始初始化应该可以正常工作:
这也可以工作:
郸身
每个添加的子菜单需要4个花括号。涉及构造函数调用时,不会发生括号删除。例如
老实说,使用构造函数看起来更具可读性
现在简化为
献导外拘
您使用的代码对我来说不合适。如果要实现包含结构(树)的结构,请在节点内包括指向结构/节点的指针列表(如果无法实现,则仅包含void指针)。 大多数菜单结构本质上是一个基于列表的有序树(一个位置有n个节点,但其他位置可能有m个节点,等等)。 Robert Sedgewick编写了一本教科书“ C ++算法”。
这里的问题是相互依赖,我想可以通过类声明解决它。 做类CTreeNode;在CTree {}类之前。 http://www.codeguru.com/forum/showthread.php?t=383253 我可能正在修改此代码,但它是不完整的,因为多年以来我都不需要写树,但是我认为我已经讲了基础知识。我没有实现operator []。