2012-08-28 28 views
7

Me encuentro con el problema de la dependencia circular en una clase de plantilla. Hay un ejemplo de código:C++ - dependencia circular (utilizando el tipo interno de la subclase en la clase base con plantilla)

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

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

Cuando intento crear una instancia de B, me sale un error de compilación: 'C' no es un miembro de 'B' (MSVC) o Uso no válido de tipo incompleto ' struct B ' (GCC).
¿Cuál es la mejor manera de cambiar la muestra para que funcione?

+3

No puede. Proporcione un ejemplo un poco más completo del problema que está tratando de resolver, y podemos ver la refacturación del código. –

Respuesta

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

Puede no ser útil si 'A' es una plantilla CRTP que pone el tipo de parámetro' T' en las declaraciones de miembros. En ese caso, probablemente solo tendrá que hacer 'C' un parámetro de plantilla adicional. – aschepler

Cuestiones relacionadas