si se puede, aca te dejo un ejemplo:
Código C++:
Ver originalstruct ejemplo{
int x;
int y;
} vEjemplo, *pEjemplo;
//la siguiente funcion devuelve un struct de tipo ejemplo
ejemplo devuelve_struct(){
ejemplo Temp;
Temp.x=1;
Temp.y=2;
return Temp;
}
//la siguiente funcion devuelve un puntero que apunta a un struct de tipo ejemplo
ejemplo* devuelve_puntero_struct(){
ejemplo *Temp= new ejemplo();
Temp->x=1;
Temp->y=2;
return Temp;
}
vEjemplo= devuelve_struct();
pEjemplo= devuelve_puntero_struct();
cout<< vEjemplo.x<< " "<< vEjemplo.y;
cout<<endl;
cout<< pEjemplo->x<< " "<< pEjemplo->y;
fijate que cuando programas la funcion, el tipo de dato que esta tiene que retornar es del mismo struct que queres obtener, en el ejemplo anterior te mostre con variable y con puntero. Asi que para que puedas devolver un struct, este debe tener un nombre para saber como retornarlo en la funcion, no te sirve de nada declarar el struct como sigue si es que lo queres implementar en una funcion:
Código C++:
Ver originalstruct{
int x;
int y;
} vEjemplo, *pEjemplo
//si bien lo anterior es valido, no sabes que tipo debe retornar la funcion
ahora, cuando lo implementas a una structura como un lista, una pila o una cola, tenes que asegurarte que retornar un puntero que apunte al mismo tipo de datos con el que estas trabajando. tambien tene cuidado de no desarmar la estructura con la que estas trabajando, es decir, actualizar los punteros por los que se accede en caso de ser necesario, actualizar los punteros que apuntan al puntero a retornar, y todas las cosas necesarias para no desarmar la estructura.
saludos