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

Eso se puede hacer con punteros:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct A;
  4.  
  5. int main (){
  6.     struct A* a;
  7.  
  8.     getchar();
  9.     return 0;
  10. }
  11.  
  12. struct A{int b;int c;};

Pero no puedes inicializar el puntero ahí.

Aquí tienes un uso "práctico" de esta técnica:

Código C:
Ver original
  1. [HIGHLIGHT="C"]#include <stdio.h>
  2. #include <stdlib.h>
  3. struct A;
  4.  
  5. char quienEsMayor(struct A*,struct A*);
  6.  
  7. struct A* queDevolver(struct A* primero,struct A* segundo)
  8. {
  9.     if (quienEsMayor(primero,segundo)) return primero;
  10.     else return segundo;
  11. }
  12.  
  13. int main (){
  14.  
  15.     getchar();
  16.     return 0;
  17. }
  18.  
  19. struct A{int b;int c;};
  20.  
  21. char quienEsMayor(struct A* a1,struct A* a2)
  22. {
  23.     return a1->b > a2 -> b;
  24. }
[/HIGHLIGHT]

Otra versión en C++:
Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct A;
  4.  
  5. struct B
  6. {
  7.     A* atributo;
  8.     float otroatributo;
  9.  
  10.     A* getAtributo(){return atributo;};
  11.  
  12.     B(A* cosa)
  13.     {
  14.         atributo = cosa;
  15.         otroatributo = 0.0;
  16.     }
  17. };
  18. int main (){
  19.  
  20.     getchar();
  21.     return 0;
  22. }
  23.  
  24. struct A{int b;int c;};

Puedes trabajar pero con algunas limitaciones, como no adceder al contenido del objeto.

Yo esto lo uso para resolver conflictos (una clase A contiene una referencia a una B y una clase B contiene una referencia a una A). Hago esto en el header para evitar el conflicto y luego en el cpp incluyo la clase de forma normal.