Salve Ragazzi, non capisco perchè ho sempre problemi quando definisco i costruttori fuori dal corpo classe:
codice://Persona.h #ifndef PERSONA_H #define PERSONA_H #include "Data.h" using namespace std; class Persona{ public: Persona(); Persona(string,string,Data); virtual void print()=0; protected: string nome; string cognome; Data date; }; class Studente : public Persona{ public: Studente (); Studente (string a, string b, Data c, string d); virtual void print(); ~Studente(); protected: string CDL; }; class Docente : public Persona{ public: Docente (); Docente (string a,string b,Data c,string d); virtual void print(); ~Docente(); private: string Materia; }; class StudenteSpecialista : public Studente{ public: StudenteSpecialista (); StudenteSpecialista (string,string,Data,string,string); virtual void print(); ~StudenteSpecialista(); private: string LT; }; #endifcodice://Persona.cpp #include <iostream> #include "Persona.h" #include "Data.h" using namespace std; Persona::Persona(){ nome="-"; cognome="-"; } Persona::Persona(string a, string b, Data c){ nome=a; cognome=b; date=c; } Studente::Studente(){ Persona(); CDL="-"; } Studente::Studente(string a,string b,Data c,string d){ Persona(a,b,c); CDL=d; } void Studente::print(){ cout<<nome<<endl<<cognome<<endl<<date<<endl<<CDL<<endl<<endl; } Docente::Docente(){ Persona(); Materia="-"; } Docente::Docente(string a, string b, Data c, string d){ Persona (a,b,c); Materia=d; } Studente::~Studente(){ cout<<"Distruttore"<<endl; } Docente::~Docente(){ cout<<"Distruttore"<<endl; }il main è un semplice file di prova..codice:||=== Build: Debug in ese5 (compiler: GNU GCC Compiler) ===| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.cpp||In constructor 'Studente::Studente()':| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.cpp|21|error: cannot allocate an object of abstract type 'Persona'| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.h|6|note: because the following virtual functions are pure within 'Persona':| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.h|10|note: virtual void Persona::print()| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.cpp||In constructor 'Studente::Studente(std::string, std::string, Data, std::string)':| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.cpp|26|error: cannot allocate an object of abstract type 'Persona'| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.h|6|note: since type 'Persona' has pure virtual functions| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.cpp||In member function 'virtual void Studente::print()':| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.cpp|31|error: cannot bind 'std::basic_ostream<char>::__ostream_type {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'| c:\program files\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream|602|error: initializing argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = Data]'| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.cpp||In constructor 'Docente::Docente()':| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.cpp|35|error: cannot allocate an object of abstract type 'Persona'| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.h|6|note: since type 'Persona' has pure virtual functions| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.cpp||In constructor 'Docente::Docente(std::string, std::string, Data, std::string)':| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.cpp|40|error: cannot allocate an object of abstract type 'Persona'| C:\Users\Vinc\Desktop\Bill\Bill_ese_9\ese5\Persona.h|6|note: since type 'Persona' has pure virtual functions| ||=== Build finished: 6 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
codice://main.cpp #include <iostream> #include "Persona.h" #include "Data.h" using namespace std; int main(){ Studente l; Docente d; }

Rispondi quotando
