2014-12-16 17 views
6

Pratik için, yinelemeli bir dizin ayrıştırıcısı yapmaya çalışıyorum. "C++ Standart (2003) açıkça başlatmasını söylüyor -Yinelemeli olarak kendi listelerini içeren nesne

1 class CDirectory 
2 { 
3  private: 
4  std::string name; 
5  std::vector<CDirectory> subDirectories 
6 public: 
7  //Various things, constructors etc. go here 
8 } 

Ancak 5 davranışı desteklenmez hat I see here: Cimrilik uğruna

, ben mesela, yinelemeli çok sonucu içermesini istediğiniz Tamamlanmamış bir tip olan standart bir kap, tanımsız davranışını çağırır. "

Ne yapmalıyım? Bir nesnenin benzer nesnelerin bir listesini içermesinin bir yolu yok mu? Başka bir şey yoksa, vektörlerin bir vektörünü yapmak için hiçbir şekilde yasa dışı olduğunu biliyorum, bu yüzden kendini içeren bir nesne.

+0

. Diğer sorunun (üstte düzenlenmiş) bununla aynı olduğunu kabul ediyorum. – medivh

+0

aynı türde bir vektörü oluşturamazsınız. – Yakk

cevap

0

std::vector<CDirectory*> subDirectories; 
+0

Bellek yönetimi/yaşam boyu sorunları kolaylaştırmak için ham işaretçiler yerine std :: shared_ptr 'kullanmayı düşünürüm. – sdzivanovich

+0

Bunları kullanma konusunda fazla tecrübem yok. Cevabımı düzenleyeceğim ... doğruysa bana bildirin. –

+0

@sdzivanovich Bu paylaşılan semantiklerin gerekli olduğunu varsayar. Hangisi hiç belli değil. – juanchopanza

1

Boost containers that support incomplete types vardır işaretçiler vektör olun. Bunlardan birini kullanabilirsiniz. Do it: kapatmak için oy kullanma konusunu düşünmekte hepinizin için

#include <boost/container/vector.hpp> 

class CDirectory 
{ 
    private: 
     std::string name; 
     boost::container::vector<CDirectory> subDirectories 
    public: 
     //Various things, constructors etc. go here 
}; 
İlgili konular