Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: grucho en 30 Octubre 2017, 22:27 pm



Título: por que en algunos archivos de encabezados crean clases imcompletas
Publicado por: grucho en 30 Octubre 2017, 22:27 pm
Hola gente quisiera saber por que en algunos archivos de encabezados crean clases imcompletas.

aca un ejemplo.
Código
  1. #pragma once
  2.  
  3. class InteractComponent; // <------ a esto me refiero con clase incompleta.
  4.  
  5. class LeverTile final : public LevelDynamicTile {
  6. public:
  7. LeverTile(LevelScreen* levelScreen);
  8.  
  9. //.....
  10. //.....
  11. private:
  12. // the lever can only be used by hand if the main char is in this range.
  13. // it is however always possible for a telekinesis spell to activate the lever if its projectile reaches the lever.
  14. static const float ACTIVATE_RANGE;
  15. std::vector<LeverDependentTile*> m_dependentTiles;
  16. bool m_isGround = false;
  17. bool m_isTelekinesisLocked = false;
  18. InteractComponent* m_interactComponent;
  19. };

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 (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: Ayuda c++
Publicado por: 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.


Título: Re: por que en algunos archivos de encabezados crean clases imcompletas
Publicado por: grucho en 31 Octubre 2017, 16:54 pm
antes q nada muchas gracias x responder.

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


Título: Re: por que en algunos archivos de encabezados crean clases imcompletas
Publicado por: CalgaryCorpus en 1 Noviembre 2017, 04:25 am
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í