#include <string>
#include <deque>
//#include <vector>
#include <map>
namespace xmltree {
class XMLNode {
// other fields, methods...
std::deque<XMLNode> _childs;
...
如果定义_childs
为std::vector<XMLNode>
代码将编译,但是std::deque
出现错误:
C2027使用未定义类型
std :: deque在这里出了什么问题以及如何解决?
为什么std::deque
失败
std::deque
需要完整的元素类型。声明时您XMLNode
还不完整。解决此问题的通常方法是使用某种(智能)指针。指向不完整类型的指针是完整的。(无论它们指向什么,所有指针的大小都相同。)
因此,一种选择是std::deque<std::unique_ptr<XMLNode>>
,但是根据您的方案,您可能需要使用其他工具。
请参阅有关的文档std::deque
为什么要std::vector
编译
std::vector
自C ++ 17在特殊情况下以来,允许在实例化期间使用不完整的元素类型。具体来说,当不完整类型的分配器完成时,它允许它。在您的示例中似乎就是这种情况。请注意,std::vector
只有在元素类型完整后才能使用,例如添加,调整大小,访问元素等。
请参阅有关的文档std::vector
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句