problème de surcharge operateur '+' et '='
Salut à tous !
je me remets (difficilement) au C++ après une 20aine d'années. je programme une classe 'matrice'. La surcharge de l'opérateur + ne fonctionne pas correctement. L'opération sur des matrices m, n et p du type
p = m + n; renvoie une erreur : no matching function for call to 'matrice::matrice(matrice)' comme si le compilateur cherchait à appliquer le contructeur de copie au lieu de la fonction operator=.
Code:
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| // matrice.h
#ifndef _Matrice_
#define _Matrice_
#include <iostream>
using namespace std;
class matrice{
friend ostream& operator<<( ostream& flux, matrice &m);
friend matrice operator+(const matrice &m1, const matrice &m2);
public :
matrice() { _li=0; _col=0; _val = 0;};
matrice(int li, int col);
matrice(matrice &m); // cons de copie
float& operator()(int li, int col); // setter
float operator()(int li, int col) const; // getter
matrice& operator=(const matrice &m);
int lignes(){ return _li;};
int colonnes(){ return _col;};
private :
int _li, _col;
float *_val;
};
#endif
// matrice.cpp
#include "matrice.h"
matrice::matrice(int li , int col){
_li = li;
_col= col;
_val = new float[_li * _col];
}
matrice::matrice(matrice &m){
_li = m._li;
_col = m._col;
delete[] _val;
int n = _li*_col;
_val = new float[n];
for(int i=0; i<n; i++)
_val[i] = m._val[i];
}
matrice operator+(const matrice &m1, const matrice &m2){
matrice temp(m1._li, m1._col);
int n = temp._li * temp._col;
for(int i = 0; i<n; i++)
temp._val[i] = m1._val[i] + m2._val[i];
return temp;
}
matrice &matrice::operator=(const matrice &m){
if(this !=&m)
{
delete [] _val;
_li = m._li;
_col = m._col;
int n = _li*_col;
_val = new float[n];
for(int i = 0; i<n; i++)
_val[i] = m._val[i];
}
return *this;
}
//main.cpp :
#include <iostream>
#include "matrice.h"
using namespace std;
int main()
{
matrice m(3,3);
for(int i = 0; i<3; i++)
for(int j=0; j<3; j++)
m(i,j) = i*3 + j;
matrice n;
matrice p;
n = m;
p = m + n; ! no matching function for call to 'matrice::matrice(matrice)'
cout << p << endl;
return 0;
} |