Eso se puede hacer con punteros:
Código C++:
Ver original#include <stdio.h>
#include <stdlib.h>
struct A;
int main (){
struct A* a;
return 0;
}
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[HIGHLIGHT="C"]#include <stdio.h>
#include <stdlib.h>
struct A;
char quienEsMayor(struct A*,struct A*);
struct A* queDevolver(struct A* primero,struct A* segundo)
{
if (quienEsMayor(primero,segundo)) return primero;
else return segundo;
}
int main (){
return 0;
}
struct A{int b;int c;};
char quienEsMayor(struct A* a1,struct A* a2)
{
return a1->b > a2 -> b;
}
[/HIGHLIGHT]
Otra versión en C++:
Código C++:
Ver original#include <stdio.h>
#include <stdlib.h>
struct A;
struct B
{
A* atributo;
float otroatributo;
A* getAtributo(){return atributo;};
B(A* cosa)
{
atributo = cosa;
otroatributo = 0.0;
}
};
int main (){
return 0;
}
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.