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;
}