c – 如何创建包含自身列表的结构?

我想创建一个包含相同结构列表的结构,如下所示:
#include <list>
struct Url
{
    CString strUrl;
    std::list<Url> children;
};

int main()
{
    Url u1,u2;
    u1.children.push_back(u2);
}

代码未编译.但是当我用std :: vector替换std :: list时它工作正常.如何使用std :: list?

输出窗口包含以下错误.

c:\program files\microsoft visual studio\vc98\include\list(29) : error C2079: '_Value' uses undefined struct 'Url'
        E:\test\Test.cpp(23) : see reference to class template instantiation 'std::list<struct Url,class std::allocator<struct Url> >' being compiled
c:\program files\microsoft visual studio\vc98\include\functional(185) : error C2079: 'value' uses undefined struct 'Url'
        c:\program files\microsoft visual studio\vc98\include\list(285) : see reference to class template instantiation 'std::binder2nd<struct std::not_equal_to<struct Url> >' being compiled
        E:\test\Test.cpp(23) : see reference to class template instantiation 'std::list<struct Url,class std::allocator<struct Url> >' being compiled

解决方法

如果您需要一个似乎是VC6错误的工作区,请动态创建列表:
#include <list>
#include <string>     // I don't use MFC

struct Url
{
    std::string strUrl;
    std::list<Url> * children;

    Url() {
       children = new std::list <Url>;
    }

    ~Url() {
        delete children;
    }
};

int  main()
{
    Url u1,u2;
    u1.children->push_back(u2);
}

有些人问为什么允许与成员使用相同类型的列表(在我看来是这样的)

Url array[5];

例如,作为成员不会.我也无法在标准中找到任何内容,但sizeof(std :; list< T>)并不依赖于它的列表.假设列表实现为(这里有一些伪C):

list <T> {
   listEntry <T> * first;
};

然后没有未知的大小来处理.考虑以下解决提问者问题的最小代码

template <typename T> struct A {
};

struct B {
    A <B> b;
};

我看不出任何可能的原因,这不应该是合法的.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...