对于练习,我试图创建一个递归目录解析器。
为了简约,我想要递归地包含结果,例如:
1 class CDirectory
2 {
3 private:
4 std::string name;
5 std::vector<CDirectory> subDirectories
6 public:
7 //Various things, constructors etc. go here
8 }
但是,第5行不支持I see here行为 - &#34; C ++标准(2003)明确指出实例化具有不完整类型的标准容器会调用未定义的行为。&#34; < / p>
那我该怎么办?有没有办法让对象包含类似对象的列表?如果不出意外,我知道制作矢量矢量绝不是违法的,因此它是一个包含自身的对象。
答案 0 :(得分:1)
Boost有containers that support incomplete types。你可以使用其中一种。
#include <boost/container/vector.hpp>
class CDirectory
{
private:
std::string name;
boost::container::vector<CDirectory> subDirectories
public:
//Various things, constructors etc. go here
};
答案 1 :(得分:0)
制作一个指针矢量
std::vector<CDirectory*> subDirectories;