Problème de constructeur de copie ?
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 :
Code:
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; |
La dernière ligne me génère une erreur à la compilation (j'utilise gcc) :
Citation:
error: no matching function for call to ‘TMatrix::TMatrix(TMatrix)’
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.
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 :
Code:
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
.... |
Et voici l'implémentation de mon constructeur de copie :
Code:
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);
}
} |
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....
Si besoin, voici ce qui concerne la surcharge de mon opérateur + :
Code:
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;
} |
J'ai utilisé la syntaxe donnée dans ce cours :
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 ?
:merci:
Bestiol.
ps: excusez tous les noms en Anglais, je n'ai pas le choix ;)