2012-08-28 26 views
7

Wpadam w problem z kołowym uzależnieniem w klasie szablonowej. Jest to przykładowy kod:C++ - zależność okrągła (używając wewnętrznego typu podklasy w szablonowej klasie bazowej)

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

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

Kiedy próbuję instancję B, otrzymuję błąd kompilatora: „c” nie jest członkiem „B” (MSVC) lub Nieprawidłowe użycie niekompletnej typu ' struct B ' (GCC).
Jaki jest najlepszy sposób na zmianę próbki, aby działała?

+3

Nie możesz. Podaj nieco bardziej kompletny przykład problemu, który próbujesz rozwiązać, a my możemy popatrzeć na refaktoryzację kodu. –

Odpowiedz

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

Może nie być pomocne, jeśli "A" jest szablonem CRTP, który umieszcza typ parametru "T" w deklaracjach członkowskich. W takim przypadku prawdopodobnie będziesz musiał po prostu wprowadzić "C" jako dodatkowy parametr szablonu. – aschepler