2012-08-28 15 views
7

Tempold sınıfında döngüsel bağımlılık sorunuyla karşılaşıyorum. Ben B örneğini çalıştığınızdaC++ - dairesel bağımlılık (templated taban sınıfında alt sınıfın iç tipini kullanarak)

template <typename T> struct A 
{ 
    typedef typename T::C D; 
    //typename T::C c; 
}; 

struct B : public A<B> 
{ 
    struct C {}; 
}; 

, bir derleyici hatası alıyorum: 'C' 'B' (MSVC) veya eksik Çeşidi Geçersiz kullanım 'üyesi olmayan bir kod örneği yoktur Yapı B ' (GCC).
Çalışması için örneği değiştirmenin en iyi yolu nedir?

+3

Yapamazsınız. Çözmeye çalıştığınız sorunun biraz daha eksiksiz bir örneğini sağlayın ve kodun yeniden düzenlenmesine bakabiliriz. –

cevap

6
struct B_base { struct C {}; }; 
strucr B : A<B_base>, B_base { }; 
+0

"A", üye bildirimlerinde "T" parametre türünü koyan bir CRTP şablonu ise yardımcı olmayabilir. Bu durumda, muhtemelen "C" ek bir şablon parametresi oluşturmanız gerekir. – aschepler

İlgili konular