Bonjour à tous !
J'ai un petit problème avec C++ et les constructeurs de copie... j'avoue être un peu perdu, et là j'ai une erreur dont je ne comprends pas l'origine, ni la manière de la résoudre, du coup.
Le contexte est le suivant :
J'ai une classe TMatrix qui gère une matrice de TComplex (qui est une autre classe perso pour laquelle je n'ai pas de souci). Elle possède un constructeur permettant de spécifier le nombre de lignes et de colonnes à la création, et un constructeur de copie.
Mon problème se situe je pense au niveau de ce constructeur de copie. Si on considère le code suivant :
La dernière ligne me génère une erreur à la compilation (j'utilise gcc) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 TMatrix m1(2,2), m2(2,2), m3(2,2); // ... assignation des valeurs de m1 et m2, aucun pb ici ... m3 = m1 + m2;
Pour moi cette erreur m'indique que le compilateur ne trouve pas de constructeur adéquat pour une assignation du résultat de l'addition à m3.error: no matching function for call to ‘TMatrix::TMatrix(TMatrix)’
J'ai bien sûr surchargé l'opérateur +, et si je supprime "m3 =" de la ligne incriminée je n'ai plus d'erreur.
Ma classe est définie ainsi :
Et voici l'implémentation de mon constructeur de copie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class TMatrix { private: TComplex **fMatrix; int fRows, fCols; //Procédure d'initialisation du tableau de TComplex void InitializeMatrix(TComplex ***m, int rows, int cols); public: TMatrix(const int rows, const int cols); //Constructeur TMatrix(TMatrix &m); //Constructeur de copie ....
Vue l'erreur j'imagine que le corps en lui-même du constructeur n'est pas à mettre en cause, du moins dans un premier temps....
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 TMatrix::TMatrix(TMatrix &m) { fRows = m.fRows; fCols = m.fCols; //Initialization de la nouvelle matrice InitializeMatrix(&fMatrix, fRows, fCols); //Copie des valeurs for(int i = 0; i < fRows; i++) { for(int j = 0; j < fCols; j++) fMatrix[i][j] = m.GetComplex(i, j); } }
Si besoin, voici ce qui concerne la surcharge de mon opérateur + :
J'ai utilisé la syntaxe donnée dans ce cours :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 TMatrix TMatrix::operator+(const TMatrix m) const { TMatrix sum(fRows, fCols); for(int i = 0; i < fRows; i++) for(int j = 0; j < fCols; j++) { sum.GetComplex(i, j).SetRealPart(GetComplex(i, j).GetRealPart() + m.GetComplex(i, j).GetRealPart()); sum.GetComplex(i, j).SetImagPart(GetComplex(i, j).GetImagPart() + m.GetComplex(i, j).GetImagPart()); } return sum; }
ftp://ftp2.developpez.be/developps/c/PolyCpp.pdf
Ca a très bien fonctionné pour ma classe TComplex (qui gère la partie réelle/imaginaire d'un nombre complexe et les opérations de base entre deux TComplex), et je ne comprends vraiment pas ce qui bloque ici
Est-ce que quelqu'un pourrait m'éclairer ?
Bestiol.
ps: excusez tous les noms en Anglais, je n'ai pas le choix
Partager