Bonjour,

J'ai créé une classe matrice pour inclure le calcul matriciel dans mon programme. Je sais que des librairies existent mais moi je veux pas les utiliser. Je tiens à le faire par moi-même.
J'ai surchargé l'opérateur () pour pouvoir accéder a un élément tableau private. Voilà le code:
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
29
30
31
#ifndef MATRIX_H
#define MATRIX_H
 
#include <QVector>
 
class Matrix
{
public:
    Matrix();
    void setSize(int rowNumber, int columnNumber);
    int rowCount();
    int columnCount();
    double operator()(int rowId, int columnId) const;
    double& operator()(int rowId, int columnId);
 
    void reverse();
    void transpose();
    double determinant();
    ~Matrix();
 
private:
    int row;
    int column;
    QVector<double> data;
    double Det3x3Matrix(Matrix *M);
};
 
Matrix operator+(Matrix a, Matrix b);
Matrix operator*(Matrix a, Matrix b);
 
#endif // MATRIX_H

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
double Matrix::operator()(int rowId, int columnId) const
{
    return data[column*rowId+columnId];
}
 
double& Matrix::operator()(int rowId, int columnId)
{
    return data[column*rowId+columnId];
}
L'intérêt est de pouvoir déclarer une matrice M et d'appeler ses éléments avec M(0,0) ou M(2,3), etc... ça marche bien sauf si M est un pointeur. Cette fonction ne marche pas et je ne sais pas pourquoi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
double Matrix::Det3x3Matrix(Matrix *M)
{
    double determinant = 0;
    if (M->rowCount() == M->columnCount()) // On vérifie que M est une matrice carrée
    {
        determinant =
                M[0, 0] * (M[1, 1] * M[2, 2] - M[2, 1] * M[1, 2]) -
                M[0, 1] * (M[1, 0] * M[2, 2] - M[2, 0] * M[1, 2]) +
                M[0, 2] * (M[1, 0] * M[2, 1] - M[2, 0] * M[1, 1]);
    }
    return determinant;
}
Il ne comprend pas l'opérateur -. Normal car je ne l'ai pas surchargé. En revanche l'opération devrait se passer entre des double, et pas des Matrices. J'en conclu que M[0,0] ne renvoie pas un double mais une matrice apparament. Pourquoi????

Merci de votre aide.

Cordialement