Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a structure which contains a list of itself?

Tags:

People also ask

Can a structure contain an instance of itself?

Because incomplete types are not allowed as members, a structure or union type may not contain an instance of itself as a member, but is allowed to contain a pointer to an instance of itself.

Can a struct contain a list?

Yes you can have a list in struct but you cannot initialise it with a field initialiser and instead you must use the constructor. Also note that you can not have a parameter-less constructor.

Can a struct contain itself C++?

A structure can not refer itself directly. union VAL v; struct list * next; };

Why do you think a structure can never have an instance of itself in C?

Because it is impossible to create memory layout for such structure.


I want to create a structure which contains a list of same structure like this:

#include <list>
struct Url
{
    CString strUrl;
    std::list<Url> children;
};

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

This code is not compiling. But when I replace std::list with std::vector it is working fine. How can I make this working with std::list?

Output window contains the following error.

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