Если вам нужна рабочая среда для того, что кажется ошибкой 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;
};
Я не вижу никакой возможной причины, по которой это не должно быть законным.