Chcę utworzyć strukturę, która zawiera listę samej strukturze jak poniżej:Jak utworzyć strukturę, która zawiera własną listę?
#include <list>
struct Url
{
CString strUrl;
std::list<Url> children;
};
int main()
{
Url u1, u2;
u1.children.push_back(u2);
}
Ten kod nie jest kompilacją. Ale kiedy zastąpię std::list
z std::vector
, to działa dobrze. Jak mogę sprawić, aby działało to z std::list
?
Okno wyjściowe zawiera następujący błąd.
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
+1, ale jak powiedziałem JaredPar: dlaczego jesteś tak pewny, że to powinno być dozwolone? Z pewnością nie można zadeklarować tablicy X w definicji X (mogłoby to prowadzić do nieskończonej wielkości struktury danych), więc dlaczego miałaby być dozwolona lista? Nie mogę znaleźć niczego w standardzie, więc myślę, że fakt, który jest dozwolony w niektórych implementacjach, jest prawdopodobnie tylko szczegółem implementacji. Myśli? –
Najlepszym sposobem obejścia błędów VC6 jest użycie kompilatora napisanego w tym tysiącleciu i po standaryzacji języka. ;) – jalf
@j_random_hacker: Ale możesz zadeklarować wskaźnik do tablicy X w definicji X (lub po prostu wskaźnik do X). I tutaj zapisuje wskaźnik do listy. Ale nie pamiętam wszystkich szczegółów, kiedy i jak niekompletne typy są dozwolone, więc nie jestem pewien, czy to czyni je legalnymi. :) – jalf