Ciao a tutti mi presento sono Paolo e vi scrivo per chiedervi un aiuto. Non riesco a capire cosa non va nel codice che vi allego. In particolare, voglio semplicemente dichiarare un oggetto derivato in una funzione esterna (non membro) e passarlo al main. Come fare?

Grazie in anticipo
Paolo

#include<iostream.h>
#include<string.h>
#include<stdio.h>

class animal
{

protected:
int zampe;
char *alim;

public:

animal();

animal(const animal &ogg){
alim = new char[10];
strcpy(alim,ogg.alim);
zampe = ogg.zampe;
cout <<"Costruzione di COPIA animal"<<endl;
}

~animal(); //Distruttore
void set_zampe(int z){ zampe = z; return;}
void set_alim(char *s){
strcpy(alim,s); return;}
int get_zampe(){ return zampe;}
char* get_alim(){ return alim; }
};

animal::animal()
{
alim = new char[10];
if(!alim) cout<<"Errore nella allocazione"<<endl;
else cout <<"Costruzione di animal"<<endl;
}

animal::~animal()
{
cout<<endl<<"Distruzione di animal"<<endl;
delete alim;
}



class scimmie: public animal
{
char *razza;

public:

scimmie(){ razza = new char [10]; cout<<"costruttore di scimmia"<<endl;}
scimmie(const scimmie &ogg);


~scimmie(){ delete razza; cout<<"distruttore di scimmia"<<endl;}
void set_razza(char *r){ strcpy(razza,r); return;}
char *get_razza(){ return razza;}

};

scimmie::scimmie(const scimmie &ogg): animal(ogg) {

razza = new char [10];
strcpy(razza,ogg.razza);
cout <<"Costruzione di COPIA scimmie"<<endl;
}

scimmie visu()
{


scimmie U;
char *cibo, *razza;
int zampe;

cibo = new char [10];
razza = new char [10];

cout<<"Inserire il n.ro di zampe:"<<endl;
cin>>zampe;
cout<<"Inserire l'alimentazione:"<<endl;
gets(cibo);
cout<<"Inserire la razza:"<<endl;
gets(razza);

//Inizializzazione

U.set_zampe(zampe);
U.set_alim(cibo);
U.set_razza(razza);

cout<<endl;


return U;
}

main()
{

scimmie T; //ATTENZIONE: SE METTO scimmie T = visu(); FUNZIONA! PERCHE' COSI' NO? THANKS!

T = visu();

cout<<"Il n.ro di zampe è: "<<T.get_zampe()<<endl;
cout<<"Il cibo e: "<<endl;
puts(T.get_alim());
cout<<"La razza è: "<<endl;
puts(T.get_razza());


return 1;
}