Beh guarda io l'ho fatta in C, è praticamente la stessa cosa, tanto alla fine quello che ti interessa è la funzione "somma" che in C++ verrebbe scritta esattamente allo stesso modo (il main lo puoi modificare come ti pare). Chiaramente devi scrivere il prototipo della funzione all'inizio e non la funzione direttamente, perché mi pare che il c++ lo esige, a differenza del c.

Ho usato l'allocazione dinamica per la matrice ( malloc() ) ma mi pare di capire che non hai grandi conoscenze quindi se non sai di cosa si tratta ti basta cancellare quel ciclo for con la malloc e allocare la matrice staticamente (ovviamente poi dovrai anche modificare i parametri passati alla funzione).

Gli indici li ho dichiarati globalmente, nel caso li puoi anche trascrivere all'interno delle due funzioni (somma e main) ma in questo caso è inutile.

codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

short i, j;

short somma(short *mat, short n) {

    short s=0;

    for (i=0, j=n-1; i<n; i++, j--)
       s += *(mat + n*i + j);

    return s;
}

int main(void) {

    short *matrice, n;

    printf("La matriche e' necessariamente quadrata. Immettere la lunghezza del suo lato: ");
    scanf("%hd%*c", &n);

    putchar('\n');

    for (i=0; i<n; i++)
       matrice = malloc (sizeof(short)*n*n);

    srand( (unsigned int)time(NULL) );

    for (i=0; i<n; i++)
       for (j=0; j<n; j++)
          *(matrice + n*i + j) = rand()%10;

    for (i=0; i<n; i++) {
       for (j=0; j<n; j++)
          printf("%2hd", *(matrice + n*i + j));
       putchar('\n');
   }

   printf("\nLa somma degli elementi della diagonale secondaria della matrice e': %hd", somma(matrice, n));

   getchar();
   return 0;
}