Il mio codice è collaudato con una versione ridotta della tua struttura e funziona. Studiatelo per capire come usare SortStud.
codice:
#include <cstdlib>
#include <iostream>
using namespace std;
struct Tipostud
{
char * Cognome;
int anno;
int mese;
int giorno;
double stipendio;
};
void SortStud(Tipostud ** array, size_t elements);
int StudCompare( const void *arg1, const void *arg2 );
void DisplayStud(Tipostud & stud);
int main()
{
Tipostud a, b, c;
Tipostud * arr[3]={&c, &a, &b};
a.Cognome = "Italia";
a.anno = 1990;
a.mese = 9;
a.giorno = 8;
a.stipendio=1500;
b.Cognome = "Castiglioni";
b.anno = 1958;
b.mese = 8;
b.giorno = 13;
b.stipendio=1000;
c.Cognome = "Castiglioni";
c.anno = 1932;
c.mese = 8;
c.giorno = 3;
c.stipendio=1000;
SortStud(arr,3);
DisplayStud(*arr[0]);
DisplayStud(*arr[1]);
DisplayStud(*arr[2]);
cin.sync();
cin.ignore();
return 0;
}
void DisplayStud(Tipostud & stud)
{
cout<<"---"<<endl
<<"Stipendio: "<<stud.stipendio<<endl
<<"Cognome: "<<stud.Cognome<<endl
<<"Data di nascita: "<<stud.giorno<<"/"<<stud.mese<<"/"<<stud.anno<<endl
<<"---"<<endl;
}
void SortStud(Tipostud ** array, size_t elements)
{
qsort((void *)array,elements,sizeof(*array), StudCompare);
}
int StudCompare(const void *arg1, const void *arg2)
{
Tipostud * t_arg1=*(Tipostud **)arg1, * t_arg2=*(Tipostud **)arg2;
int compResult;
if((compResult=(t_arg1->stipendio-t_arg2->stipendio))==0)
{
if((compResult=stricmp(t_arg1->Cognome,t_arg2->Cognome))==0)
{
if((compResult=(t_arg1->anno-t_arg2->anno))==0)
{
if((compResult=(t_arg1->mese-t_arg2->mese))==0)
{
if((compResult=(t_arg1->giorno-t_arg2->giorno))==0)
{
return 0;
}
}
}
}
}
return compResult;
}