Ver Mensaje Individual
  #7 (permalink)  
Antiguo 04/12/2014, 01:59
amchacon
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 4 meses
Puntos: 28
Respuesta: Prototipo de estructura en C¿Se Puede?

Cita:
Iniciado por vangodp Ver Mensaje
*_*

Voy a probar esto
Tiene sus limitaciones, solo te sirve para hacer declaraciones o usos "abstractos". No puedes ni hacer malloc, ni adceder a sus atributos internos... Lo unico que puedes hacer es definir y copiar el puntero de un lado a otro. La única utilidad que le veo es para resolver conflictos.

Voy a sacar un proyecto donde uso está tecnica para resolver un conflicto:

Figura.hpp
Código C++:
Ver original
  1. #include "Tablero.hpp"
  2.  
  3. class Figura
  4. {
  5.     public:
  6.         Figura(Tablero &m,bool color) : mat(m),Color(color){}
  7.         bool getColor() const {return Color;}
  8.         virtual int mover(Cord,Cord) = 0;
  9.         virtual int tipo() const = 0;
  10.          
  11.         /*...*/
  12.  
  13.     protected:
  14.         Tablero &mat;
  15.         bool Color;
  16. };

Tablero.hpp

Código C++:
Ver original
  1. #include "Cord.hpp"
  2.  
  3. class Figura;
  4.  
  5. class Tablero
  6. {
  7.     public:
  8.         static const bool BLANCO = 0;
  9.         static const bool NEGRO = 1;
  10.  
  11.         Tablero();
  12.         Figura* getPosition(Cord posicion) const;
  13.         bool jaque(bool color);
  14.         /* ... */
  15.     private:
  16.         Figura* Matriz[8][8];
  17.         /*...*/
  18. };

Fijate bien, Figura tiene una referencia al tablero actual. Y tablero contiene una matriz de figuras, ambos se referencian mutuamente.

Es absurdo hacer:

Tablero.hpp
Código C++:
Ver original
  1. #include "Figura.hpp"

Figura.hpp
Código C++:
Ver original
  1. #include "Tablero.hpp"

Tablero incluye a figura, y luego desde ahí vuelvo a incluir a figura... Si no le pongo protección contra la inclusión multiple fallará, y si se la pongo, una no encontrará a la otra.

Asi que opté una táctica distinta, figura.hpp incluye a tablero.hpp. Pero tablero.hpp no la incluye, sino que usa el prototipo. Luego en la implementación (.cpp) si incluyo a figura completamente:

Tablero.cpp
Código C++:
Ver original
  1. #include "Tablero.hpp"
  2. #include "Figura.hpp"
  3.  
  4. //...