Voglio creare una struttura che contiene un elenco di stessa struttura come questa:Come creare una struttura che contiene un elenco di se stesso?
#include <list>
struct Url
{
CString strUrl;
std::list<Url> children;
};
int main()
{
Url u1, u2;
u1.children.push_back(u2);
}
Questo codice non è la compilazione. Ma quando sostituisco std::list
con std::vector
funziona correttamente. Come posso farlo funzionare con std::list
?
La finestra di output contiene il seguente errore.
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, ma come ho detto a JaredPar: come mai sei così sicuro che questo * dovrebbe * essere permesso? Certamente non puoi dichiarare una matrice di X all'interno della definizione di X (questo porterebbe a una struttura di dati a dimensione infinita), quindi perché dovrebbe essere consentita una lista? Non riesco a trovare nulla nello standard, quindi penso che il fatto che sia permesso su alcune implementazioni è probabilmente solo un dettaglio di implementazione. Pensieri? –
La soluzione migliore per i bug VC6 consiste nell'utilizzare un compilatore scritto in questo millennio e dopo che il linguaggio è stato standardizzato. ;) – jalf
@j_random_hacker: Ma puoi dichiarare un puntatore a un array di X all'interno della definizione di X (o semplicemente un puntatore a X). E qui, sta memorizzando un puntatore a una lista. Ma non riesco a ricordare tutti i dettagli di quando e in che modo sono consentiti i tipi incompleti, quindi non sono sicuro che sia legale. :) – jalf