Ciao a tutti, spero possiate darmi una mano:
Il codice è questo:
codice:
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
struct Tipostud{
string Cognome;
string Nome;
string Matr;
int Eta;
int AnnoIscrizione;
string Citta;
};
typedef Tipostud* Pstud;
void Inserimento (Tipostud &, char &);
void getfile(Pstud [],Pstud [],Pstud []);
void insort(Pstud [],int ,Pstud ,char );
int main(){
int Numpers=3,Lrec=sizeof(Tipostud);
/*char chr;
Tipostud studente;
cout<<"Numero di persone da inserire: ";
cin>>Numpers;
fstream filepers;
filepers.open("studenti.bin",ios::in|ios::out|ios::binary|ios::ate);
if (!filepers)
filepers.open("studenti.bin",ios::out|ios::binary|ios::trunc);
while(Numpers>0){
Inserimento(studente,chr);
if (chr=='s') {
filepers.seekp(0,ios::end);
filepers.write((char*)&studente,Lrec);
Numpers--;
}}
filepers.close();*/
Pstud PuntaP1[Numpers],PuntaP2[Numpers],PuntaP3[Numpers];
getfile(PuntaP1,PuntaP2,PuntaP3);
system("pause");
return 0;
}
void Inserimento (Tipostud &pers1, char &ch)
{
cout << "INSERIMENTO PERSONE" << endl << endl;
cout << "Cognome= ";
cin >> pers1.Cognome;
cout << "Nome= ";
cin >> pers1.Nome;
cout << "Eta\'= ";
cin >> pers1.Eta;
cout << "Matricola= ";
cin >> pers1.Matr;
cout << "Anno Iscrizione= ";
cin >> pers1.AnnoIscrizione;
cout << "Citta\'= ";
cin >> pers1.Citta;
cout << "Salva (s/n)? ";
cin >> ch;
}
void getfile(Pstud PuntaP1[],Pstud PuntaP2[],Pstud PuntaP3[]){
Tipostud studente;
ifstream file;
file.open("studenti.bin",ios::in|ios::binary|ios::ate);
if (!file)
file.open("studenti.bin",ios::out|ios::binary|ios::trunc);
int Lrec=sizeof(Tipostud);
int Numstud=file.tellg()/Lrec;
file.seekg(0,ios::beg);
for(int i=1;i<Numstud;i++){
file.read((char*) &studente,Lrec);
PuntaP1[i]=new Tipostud;
*PuntaP1[i]=studente;
PuntaP2[i]=PuntaP1[i];
PuntaP3[i]=PuntaP1[i];
insort(PuntaP1,i,PuntaP1[i],'c');
insort(PuntaP2,i,PuntaP2[i],'m');
insort(PuntaP3,i,PuntaP3[i],'e');
}
file.close();
}
void insort(Pstud Punt[],int n,Pstud Temp,char ord){
int j;
Punt[0]=Temp;
j=n-1;
if(ord=='c'){
while(stricmp(Punt[j].Cognome,Punt[0].Cognome)>0){
Punt[j+1]=Punt[j];
j--;
}
}
else if(ord=='m'){
while(stricmp(Punt[j].Matr,Punt[0].Matr)>0){
Punt[j+1]=Punt[j];
j--;
}
}
else{
while(Punt[j].Eta>Punt[0].Matr){
Punt[j+1]=Punt[j];
j--;
}
}
Punt[j+1]=Punt[0];
}
L'errore che non capisco e che non mi fa andare avanti è questo:
codice:
In function `void insort(Tipostud**, int, Tipostud*, char)':
Cognome' has not been declared
request for member of non-aggregate type before ',' token
`Cognome' has not been declared
Lo stesso errore è ripetuto per Matr ed Eta. Sapete indicarmi una soluzione ed il motivo dell'errore?