Bonsoir à tous,
j'ai à faire un projet et implémenter une classe matrice du type:
et je dois surcharger l'opérateur [] pour admettre l'écriture suivante dans un fichier .c telle par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template <class T> class Matrix { public: int nb_lines; int nb_columns; T** mat; // ... constructeurs, fonctions membres }
voilà ce que j'ai écrit dans ma classe (je sais c'est très moche et surement faux mais je suis débutant alors je ruse :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ... std::cout<<m[i][j]; // const monnamespace::Matrix<double> &m passé en paramètre d'une fonction d'affichage ...
et voilà ce que j'ai à la compile :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 int i_stat,j_stat; bool eval = false; T& operator [] (const int & tmp) { if (eval == false) { if (tmp >= nb_lines) { cerr << "\nERREUR: indice hors de domaine\n"; exit(1); } i_stat = tmp; return; } else { if (tmp >= nb_columns) { cerr << "\nERREUR: indice hors de domaine\n"; exit(1); } eval = false; j_stat = tmp; return mat[i_stat][j_stat]; } }
donc je fais quelque chose de très mal mais j'ai entendu dire que la gestion des [][] était assez délicate à coder et qu'il fallait mieux utiliser les "()" à la place, oui mais voilà, c'était sans compter sur la perversité de mes profs ... je dois le faire.g++ testMatrix.c -c
testMatrix.c: In function `void affiche(const umlv::Matrix<double>&, const umlv::Matrix<double>&)':
testMatrix.c:11: error: passing `const umlv::Matrix<double>' as `this' argument of `T& umlv::Matrix<T>::operator[](const int&) [with T = double]' discards qualifiers
testMatrix.c:11: error: invalid types `double[int]' for array subscript
matrixbeta.h: In member function `T& umlv::Matrix<T>::operator[](const int&) [with T = double]':
testMatrix.c:11: instantiated from here
matrixbeta.h:126: error: return-statement with no value, in function returning 'double&'
make: *** [matrix.o] Erreur 1
Si quelqu'un peut me donner un tuyau car je bloque depuis 3 heures et j'ai d'autres projets qui attendent leurs tours ....
Merci pour le coup de main, vais manger et vous lis ensuite, j'espère !!
BYE
[Balise [code] et [quote] ajouté par netah_25 - Merci d'y penser a l'avenir][/b]
Partager