2010-07-06 13 views
7

Estoy haciendo un juego y tengo una clase llamada Man y una clase llamada Block en su código, ambas se necesitan mutuamente, pero están en archivos separados. ¿Hay alguna manera de "predefinir" una clase? ¿Como la macro de clase @ de Objective-C?C++: dos clases que se necesitan

+2

Parece que lo que quieres es una declaración directa. – mooware

+0

+1 para BlockDude. –

Respuesta

5

Se llama dependencia circular. En la clase Two.h

class One; 

class Two { 
    public: 
    One* oneRef; 
}; 

Y en la clase One.h

class Two; 

class One { 
    public: 
    Two* twoRef; 
}; 

La "clase Uno;" y "clase dos"; las directivas asignan los nombres de clase "Uno" y "Dos" respectivamente; pero no definen ningún otro detalle más allá del nombre. Por lo tanto, puede crear punteros de la clase, pero no se puede incluir toda la clase de este modo:

class One; 

class Two : public One { 
}; 

class Three { 
    public: 
    One one; 
}; 

La razón de los dos ejemplos anteriores no compilar es porque mientras que el compilador sabe que hay una clase Uno, que doesn' t saber qué campos, métodos o métodos virtuales, la clase Uno podría contener porque solo se había definido el nombre, no la definición de clase real.

11

Sí.

class Man; 

Esta declarará Man como un "tipo incompleto". Puede declarar punteros o referencias a él y algunas otras cosas, pero no puede crear una instancia o acceder a miembros de ella. Esta no es una descripción completa de lo que puede y no puede hacer con un tipo incompleto, pero es la idea general.

+1

Es importante tener en cuenta que puede continuar e incluir el tipo completo más adelante y obtener acceso. Puede usar tipos incompletos en el encabezado y luego incluir la definición completa del encabezado en el cpp para usarlo. –

Cuestiones relacionadas