Jeżeli chcesz użyć takiego rozwiązania :
root.children.push_back(sub1);
sub1.children.push_back(sub11);
root.children.push_back(sub2);
root.children.push_back(sub3);
sub3.children.push_back(sub31);
sub31.children.push_back(sub311);
print(&root); // tu powinien być adres !
system("pause");
return 0;
}
to niezbędne jest użycie :
vector<Directory*> children;
ponieważ przy użyciu :
vector<Directory> children;
Tworzony obiekt wektora children jest kopią podanego obiektu w argumencie metody push_back .
A więc, użycie :
print(&root);
spowoduje wyświetlenie :
root
sub1
sub2
sub3
ze względu na to, że instrukcja :
sub1.children.push_back(sub11);
ma się nijak do sub1, który jest dzieckiem root'a (bo dziecko sub1 root'a jest kopią lokalnego obiektu sub1 w funkcji main !). Wygląda na to, że nawet nie przetestowałeś swojego kodu zanim zapostowałeś na 4um...
Jeśli jednak chcesz użyć konstrukcji z :
vector<Directory> children;
to musisz dodawać dzieci w następujący sposób :
root.children.push_back(sub1);
root.children.at(0).children.push_back(sub11);
// itd..
Jeśli chodzi o konstruktor kopiujący, to powinien wyglądać mniej więcej tak :
Directory(Directory *dir) {
Directory(dir->name);
children = vector<Directory>(dir->children);
}
musisz oczywiście pamiętać o destruktorze..