Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Prototipo de estructura en C¿Se Puede?

Estas en el tema de Prototipo de estructura en C¿Se Puede? en el foro de C/C++ en Foros del Web. Hola compañeros. Tengo la pregunta estupida de la semana jaja ¿¿¿Se puede hacer eso??? @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver original #include <stdio.h> #include <stdlib.h> struct ...
  #1 (permalink)  
Antiguo 02/12/2014, 21:44
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Pregunta Prototipo de estructura en C¿Se Puede?

Hola compañeros.
Tengo la pregunta estupida de la semana jaja
¿¿¿Se puede hacer eso???
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct A;
  4.  
  5. int main (){
  6.     A a;
  7.    
  8.     getchar();
  9.     return 0;
  10. }
  11.  
  12. struct A{/*[...]*/};

Ya se que
Pero si fuera posible

XDDD


PD Si existe formas de emular acepto sujestiones XDDD
  #2 (permalink)  
Antiguo 02/12/2014, 22:19
Avatar de kspr  
Fecha de Ingreso: agosto-2011
Ubicación: Ecuador
Mensajes: 43
Antigüedad: 12 años, 7 meses
Puntos: 7
Respuesta: Prototipo de estructura en C¿Se Puede?

Que tal asi?

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. typedef struct
  4. {
  5.   int a;
  6.   char * fdw;
  7. } Testing;
  8.  
  9. Testing test();
  10.  
  11. int main()
  12. {
  13.  
  14.     printf("%d y %s\n", test().a, test().fdw);
  15.  
  16.     return 0;
  17. }
  18.  
  19. Testing test()
  20. {
  21.   Testing test;
  22.  
  23.   test.a = 1;
  24.   test.fdw = "foros del web";
  25.  
  26.   return test;
  27. }

no se me ocurre otra forma :P

EDIT: no habia entendido lo que querias, no se si sea posible, pero si hay alguna forma de emular seria interesante

Última edición por kspr; 02/12/2014 a las 22:33
  #3 (permalink)  
Antiguo 02/12/2014, 22:35
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Prototipo de estructura en C¿Se Puede?

No esta mal..Pero el objetivo que intento lograr es librarme de de la implementacion antes de main y dejar una especie de prototipo al igual que se hace con las funciones. =D
Es mejor una linea sola que la estructura completa. Ya intente de todo y se que no es posible, pero por preguntar no se muere nadie. XDD
Lo unico que se me ocurre es poner la estructura en un archivo .h y ya esta. Pero ya tengo 2 archivos. =(

Gracias por comentar.
  #4 (permalink)  
Antiguo 03/12/2014, 00:31
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Prototipo de estructura en C¿Se Puede?

Nada te impide declarar la estructura en otro fichero y poner un include
  #5 (permalink)  
Antiguo 03/12/2014, 04:58
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 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.
  #6 (permalink)  
Antiguo 03/12/2014, 22:18
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Prototipo de estructura en C¿Se Puede?

Cita:
Nada te impide declarar la estructura en otro fichero y poner un include
Cierto! Si lo hiciera en un proyecto seguramente seria lo ideal, pero es por queitar cosas delante de main cuando no uso proyectos, que para mi es el 99% del tiempo. Pero crear un nuevo archivo creo que me duele mas. XDDD

Cita:
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;};
*_*

Voy a probar esto

Suerte compañeros, gracias por los comentarios.
  #7 (permalink)  
Antiguo 04/12/2014, 01:59
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 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. //...

Etiquetas: char, estructura, int, prototipo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:27.