por que en algunos archivos de encabezados crean clases imcompletas

Iniciado por grucho, 30 Octubre 2017, 22:27 PM

0 Miembros y 1 Visitante están viendo este tema.

grucho

Hola gente quisiera saber por que en algunos archivos de encabezados crean clases imcompletas.

aca un ejemplo.
Código (cpp) [Seleccionar]

#pragma once

class InteractComponent; // <------ a esto me refiero con clase incompleta.

class LeverTile final : public LevelDynamicTile {
public:
LeverTile(LevelScreen* levelScreen);

//.....
//.....
private:
// the lever can only be used by hand if the main char is in this range.
// it is however always possible for a telekinesis spell to activate the lever if its projectile reaches the lever.
static const float ACTIVATE_RANGE;
std::vector<LeverDependentTile*> m_dependentTiles;
bool m_isGround = false;
bool m_isTelekinesisLocked = false;
InteractComponent* m_interactComponent;
};


si se fijan la clase InteractComponent esta incompleta.
tambien crea un puntero de tipo InteractComponent.

desde ya muchas gracias a todos  y disculpen si no me explico bien ya q soy nuevo en c++.


· Los títulos deben ser descriptivos
>aquí las reglas del foro
-Engel Lex

CalgaryCorpus

#1
Una clase se puede declarar o definir o ambas.
Si solo pones el nombre sin especificar como esta definida, se trata de la declaracion.
Solo requieres un nombre, en ese momento. En alguna parte de tu programa tiene que estar esa variable definida, sino el programa no va a linkear.

Solo es posible definir punteros a los tipos declarados. Esto es posible, pues al compilador solo le interesa conocer el tamano de los datos y el tamano de los punteros no depende de los datos apuntados, es constante.

Si modificaras el programa y removieras el * y en vez de puntero fuera un campo de ese tipo, el compilador no va a aceptar la declaracion pues no tiene manera de calcular el tamano.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

grucho

#2
antes q nada muchas gracias x responder.

Cita de: CalgaryCorpus en 30 Octubre 2017, 23:59 PM
Una clase se puede declarar o definir o ambas.
Si solo pones el nombre sin especificar como esta definida, se trata de la declaracion.
Solo requieres un nombre, en ese momento. En alguna parte de tu programa tiene que estar esa variable definida, sino el programa no va a linkear.

Solo es posible definir punteros a los tipos declarados. Esto es posible, pues al compilador solo le interesa conocer el tamano de los datos y el tamano de los punteros no depende de los datos apuntados, es constante.

Si modificaras el programa y removieras el * y en vez de puntero fuera un campo de ese tipo, el compilador no va a aceptar la declaracion pues no tiene manera de calcular el tamano.


listo ahi entendi, pero tengo una duda nueva
por que simplemente no incluyen el archivo de encabezado de la clase InteractComponent?
disculpa si soy muy molesto

CalgaryCorpus

La compilacion no es barata.
Toma tiempo y recursos,
Si la clase tiene varios campos, el compilador tiene q chequear todo otra vez.
Más económico en tiempo y recursos, si solo usas un puntero a la clase, declararlo así
Aqui mi perfil en LinkedIn, invitame un cafe aqui