Salve a tutti stavo implementando un semplice codice per imparare ad usare il concetto di ereditarietà nelle classi. In particolare il codice riguarda una classe persona che contiene varie funzioni get e set nella sua parte pubblica e in quella protetta nome cognome ed età.Tale classe è la classe base. La classe derivata invece riguarda uno studente che eredita tutte le funzioni di persona e in più qualche altra funzioni sempre di tipo get e set per essa.Il problema sta ne file main dove se dichiaro una variabile di tipo studente mi da questo tipo di errore:
codice:
ereditarietà\main.cpp no matching function for call to `studente::studente()'
mentre se dichiaro una variabile di tipo persona va tutto bene. Come mai grazie mille a tutti per le risposte!

Questo è il codice:

File persona.h
codice:
#ifndef PERSONA_H_
#define PERSONA_H_
#include <iostream>
using namespace std;

class persona{

    protected:
            char * nome;
            char * cognome;
            short int eta;
                       
    public:
            persona(const char * n="",const char * c="",const short int e=0)
            {cout<<"costruttore base chiamato!\n"; nome=new char[strlen(n)+1];strcpy(nome,n);cognome=new char[strlen(c)+1];strcpy(cognome,c);eta=e;}
            persona(const persona &);
            const persona & operator=(const persona &);
            ~persona(){cout<<"distruttore base chiamato!\n";delete [] nome; delete [] cognome;}
            const char *get_nome()const {return nome;}
            const char *get_cognome() const {return cognome;}
            short int get_eta() const {return eta;}
            void set_nome(const char * N) {delete [] nome; nome=new char[strlen(N)+1];strcpy(nome,N);}
            void set_cognome(const char * C) {if(cognome) delete [] cognome;cognome=new char[strlen(C)+1];strcpy(cognome,C);}
            void set_eta(const short int E) {eta=E;}
            void inserisci_persona() const;
            void visualizza_persona() const;
            };

            
#endif
File persona.cpp
codice:
#include <iostream>
#include "persona.h"


using namespace std;

persona::persona(const persona & T)
{
 nome=new char[strlen(T.nome)+1];
 strcpy(nome,T.nome);
 cognome=new char[strlen(T.cognome)+1];
 strcpy(cognome,T.cognome);
 eta=T.eta;
}


const persona & persona::operator=(const persona & T)
{
 if(this!=&T)
 {
   if(nome) delete [] nome;
   nome=new char[strlen(T.nome)+1];
   strcpy(nome,T.nome);
   if(cognome) delete [] cognome;
   cognome=new char[strlen(T.cognome)+1];
   strcpy(cognome,T.cognome);
   eta=T.eta;
 }
 return *this;
}

void persona::inserisci_persona() const
{
char buffer[100];
persona P;
short int temp;
cout<<"Inserisci nome ";
cin.getline(buffer,99);
P.set_nome(buffer);
cout<<"Inserisci cognome ";
cin.getline(buffer,99);
P.set_cognome(buffer);
cout<<"Inserisci eta' ";
cin>>temp;
P.set_eta(temp);
}


void persona::visualizza_persona() const
{
 cout<<"Visualizzazione dati persona\n";
 cout<<"Nome: "<<nome<<"\n";
 cout<<"Cognome: "<<cognome<<"\n";
 cout<<"Eta': "<<eta<<"\n";
}
File studente.h
codice:
#ifndef STUDENTE_H_
#define STUDENTE_H_
#include <iostream>
#include "persona.h"

using namespace std;

class studente:public persona{
      
      private:
              char *facolta;
              int matricola;
              
      public:
              studente(const char* n="",const char * c,const short int e=0,const char* f="",const int m=0):persona(n,c,e)
              {cout<<"costruttore derivato chiamato!\n";facolta=new char[strlen(f)+1];matricola=m;}
              studente(const studente &);
              const studente & operator=(const studente &);
              ~studente() {delete [] facolta;}
              void set_facolta(const char * F) {if (facolta) delete [] facolta; facolta=new char[strlen(F)+1];strcpy(facolta,F);}
              void set_matricola(const int M) {matricola=M;} 
              const char * get_facolta() const {return facolta;}
              int get_matricola() const {return matricola;}
              void inserisci_studente() ;
              void visualizza_studente() const;
                 
      };
#endif
File studente.cpp
codice:
#include <iostream>
#include "studente.h"

using namespace std;

studente::studente(const studente & S) : persona(S)
{
 cin.ignore();
 facolta=new char[strlen(S.facolta)+1];
 strcpy(facolta,S.facolta);
 matricola=S.matricola;
}

const studente & studente::operator=(const studente & S)
{
 if(this!=&S)
 {
  persona::operator=(S);
  if(facolta) delete [] facolta;
  facolta=new char[strlen(S.facolta)+1];
  strcpy(facolta,S.facolta);
  matricola=S.matricola;
 }

 return *this;
}

void studente::visualizza_studente() const
{
 persona::visualizza_persona();
 cout<<"Visualizzazione dati studente\n";
 cout<<"Facolta': "<<facolta<<"\n";
 cout<<"Matricola: "<<matricola<<"\n";
}

void studente::inserisci_studente()
{
 
 char buffer[100];
 int MA;
 studente s1;
 cout<<"Inserisci i dati di uno studente\n";
 persona::inserisci_persona();
 cin.ignore();
 cout<<"Inserisci facolta' ";
 cin.getline(buffer,99);
 s1.set_facolta(buffer);
 cout<<"Inserire matricola ";
 cin>>MA;
 s1.set_matricola(MA);
}
codice:
#include <cstdlib>
#include <iostream>
#include "studente.h"

using namespace std;

int main(int argc, char *argv[])
{
    studente c2;
    persona c1;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}