Salve a tutti ho un problema che non riesco a risolvere in questo programa che vi descrivo in poche parole: Il programma vuole gestire una gerarchia di animali; la classe padre (che è anche virtuale in quanto possiede una funzione del tipo "virtual stampa_dati()=0") si chiama animale e in essa sono definite il codice dell'animale e la specie.Poi ci sono 2 classi figlie che sono mammifero e rettile in cui sono definite alcune funzioni "speciali" e dove vi sono ridefinite la funzione virtuale della classe padre. Poi si vuole realizzare un oggetto pila statica in cui vengono pushati i mammiferi che pesano meno di 100 kg e i rettili che sono definiti di tipo "A".Nella realizzazione della gerarchia di animali non ho trovato difficoltà, ma le ho trovate quando devo implementare la classe pila statica; in particolare il compilatore mi da i seguenti errori che proprio non riesco a risolvere; vi posto qui lo spezzone di codice in cui ci sono gli errori e dopo il resto del programma:
Ecco il resto del programma dove è illustrata la realizzazione della gerarchia:codice:In member function `void pila::inserisci_nodo(rettile, mammifero)': no match for 'operator=' in 'p[((pila*)this)->pila::t] = e' no match for 'operator=' in 'p[((pila*)this)->pila::t] = f' In member function `void pila::stampa_pila() const': no match for 'operator<<' in 'std::cout << p[i]' #ifndef PILAS_H_ #define PILAS_H_ #include "rettile.h" #include "mammifero.h" #include <iostream> using namespace std; class pila{ private: int t; static const int dim=5; public: pila(){t=0;} pila(const pila &); const pila & operator=(const pila &){}; void inserisci_nodo(const rettile e,const mammifero f); void stampa_pila()const; }; #endif #include "pila.h" #include <iostream> using namespace std; void pila::inserisci_nodo(const rettile e,const mammifero f) { pila p[dim]; if(e.get_tipo()=="A") { p[t]=e; t++; } else if(f.get_peso()<100) { p[t]=f; t++;} } void pila::stampa_pila() const { pila p[dim]; cout<<"Gli animali presenti nella pila sono:\n"; for(int i=0;i<dim;i++) cout<<p[i]<<endl; }
codice:#ifndef ANIMALE_H_ #define ANIMALE_H_ #include <iostream> #include <string> using namespace std; class animale{ protected: string codice; string specie; public: animale(const string c="",const string s="") {codice=c;specie=s;} animale(const animale &); const animale & operator=(const animale & A); virtual void stampa_dati()=0; }; #endif #include "animale.h" animale::animale(const animale & A) { this->codice=A.codice; this->specie=A.specie; } const animale & animale::operator=(const animale & A) { if(this!=&A) { this->codice=A.codice; this->specie=A.specie; } return *this; } #ifndef MAMMIFERO_H_ #define MAMMIFERO_H_ #include "animale.h" #include <string> class mammifero:public animale{ private: float peso; public: mammifero(const string c="",const string s="",const float p=0.0):animale(c,s) {peso=p;} mammifero(const mammifero &); const mammifero & operator=(const mammifero &); virtual void stampa_dati(); float get_peso() const {return peso;} }; #endif #include "mammifero.h" mammifero::mammifero(const mammifero & M):animale(M) {this->peso=M.peso;} const mammifero & mammifero::operator=(const mammifero & M) { if(this!=&M) { animale::operator=(M); this->peso=M.peso; } return *this; } void mammifero::stampa_dati() { cout<<"Dati relativi ad un mammifero:\n"; cout<<"Codice: "<<codice<<"\n"; cout<<"Specie: "<<specie<<"\n"; cout<<"Peso: "<<peso<<"\n"; } #ifndef RETTILE_H_ #define RETTILE_H_ #include <iostream> #include <string> #include "animale.h" using namespace std; class rettile:public animale{ private: string tipoesemplare; public: rettile(const string c="",const string s="",const string t=""):animale(c,s) {tipoesemplare=t;} rettile(const rettile &); const rettile & operator=(const rettile &); virtual void stampa_dati(); const string get_tipo() const {return tipoesemplare;} }; #endif #include "rettile.h" rettile::rettile(const rettile & R):animale(R) {this->tipoesemplare=R.tipoesemplare;} const rettile & rettile::operator=(const rettile & R) { if(this!=&R) { animale::operator=(R); this->tipoesemplare=R.tipoesemplare; } return *this; } void rettile::stampa_dati() { cout<<"Codice: "<<codice<<"\n"; cout<<"Specie: "<<specie<<"\n"; cout<<"Tipo di esemplare: "<<tipoesemplare<<"\n"; }

Rispondi quotando