premetto di avere una classe figlio esame e una classe principale studente. mettiamo che il codice della classe esame l' ho gia scritto!
In mezzo a sto codice mi potete aiutare a capire dove sbaglio? Le parti dove sono indeciso sono in grassetto.


codice:
 
//file .h
class studente{ 
friend istream& operator >>(istream&, studente&); 
private: 
char* nome; 
char* cognome; 
int matricola; 
int num; 
esame* esami;  


public: 
studente(char* ,char* ,int ,int ,esame*  ); 
studente(); 
~studente(); 
char* nom(); 
char* cog(); 
int mat(); 
int _num(); 
esame* esa();  

}; 


#endif 

//file.cpp 

#include "studente.h" 
#include <iostream.h> 
#include <string.h> 

istream& operator >>(istream& i, studente& s) 
{ 
i >> s.nome; 
i >> s.cognome; 
i >> s.matricola; 
i >> s.num; 
s.esami=new esame[s.num]; 
for (int k=0; k<s.num; k++) 
i >> s.esame[k]; 
return i; 
}; 

studente::studente(char* n,char* c,int m,int nu,esame* e) 
{ 
int l; 
l=strlen(n); 
nome=new char[l]; 
strcpy(nome,n); 
l=strlen(c); 
cognome=new char[l]; 
strcpy(cognome,c); 
matricola=m; 
num=nu; 
esame=new esami[i]; 
for (int i=0; i<num; i++) 
esami[i]=e[i]; 

}; 

studente::studente() 
{ 
nome=new char[13]; 
strcpy(nome,"non definito"); 
cognome=new char[13]; 
strcpy(cognome,"non definito"); 
matricola=-1; 
num=0; 
esami=new esame[0]; 
}; 


studente::~studente() 
{ 
delete [] nome; 
delete [] cognome; 
delete [] esami; 
}; 

char* studente::nom(){return nome;}; 
char* studente::cog(){return cognome;}; 
int studente::mat(){return matricola;}; 
int studente::_num(){return num;}; 
esame* studente::esa(){return esami;};
Credo di aver scritto il codice giusto, ma non capisco dove sta l'errore.Ho messo in grassetto le parti dove sono indeciso.
Mi potete aiutare?