Στην πρώτη επικάλυψη του πίνακα matrix,ζητάει κάτι τέτοιο;
float matrix::operator[](matrix a,int i,int j){
float num;
num=a[j];
return num;
}
και γω εκει εχω κολλησει float matrix::operator[](matrix a,int i,int j){
float num;
num=a[j];
return num;
}

το a ειναι τυπου matrix, γινεται να το αντιστοιχεις με το num που ειναι float ?
ως friend δηλωνεις την πρωτη επικαλυψη, ετσι?
Δεν μπορείς να το κάνεις να επιστρέφει κατευθείαν το (i,j) στοιχείο, γιατί χρειάζεσαι 3 ορίσματα και ο τελεστής παίρνει μόνο δύο. Επίσης δεν χρειάζεται να βάλεις σαν όρισμα το αντικείμενο, γιατί σαν συναρτησή μέλους(που δεν μπορεί να μην είναι) έχει πρόσβαση στο αντικείμενο (αλλά μετράει σαν όρισμα του τελεστή).
Μπορείς να το κάνεις να επιστρέφει αναφορά (float &operator[]), νομίζω ότι αυτό αρκεί. Τουλάχιστον εγώ αυτό έκανα.