que quieren crear una estructura que contiene una lista de misma estructura como esta:¿Cómo crear una estructura que contiene una lista de sí mismo?
#include <list>
struct Url
{
CString strUrl;
std::list<Url> children;
};
int main()
{
Url u1, u2;
u1.children.push_back(u2);
}
Este código no está compilando. Pero cuando reemplazo std::list
con std::vector
, funciona bien. ¿Cómo puedo hacer que esto funcione con std::list
?
La ventana de salida contiene el siguiente 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
+1, pero como le dije a JaredPar: ¿Por qué estás tan seguro de que esto * debería * estar permitido? Ciertamente no se puede declarar una matriz de X dentro de la definición de X (esto daría lugar a una estructura de datos de tamaño infinito), entonces ¿por qué debería permitirse una lista? No puedo encontrar nada en el estándar, así que creo que el hecho de que está permitido en algunas implementaciones es probablemente solo un detalle de implementación. ¿Pensamientos? –
La mejor solución para los errores de VC6 es usar un compilador escrito en este milenio, y después de que el lenguaje haya sido estandarizado. ;) – jalf
@j_random_hacker: Pero puede declarar un puntero a una matriz de X dentro de la definición de X (o solo un puntero a X). Y aquí, está almacenando un puntero a una lista. Pero no puedo recordar todos los detalles de cuándo y cómo están permitidos los tipos incompletos, así que no estoy seguro si eso lo hace legal. :) – jalf