Operator + (addition daux 2 matrices cares )
Lampard88
Messages postés
99
Statut
Membre
-
Lampard88 Messages postés 99 Statut Membre -
Lampard88 Messages postés 99 Statut Membre -
Bonjour,
j ai un projet d'addition ,soustraction et produit de 2 matrices carrés et quand j ai définie l'operateur +
Matrix Matrix:: operator+(Matrix &M)
{
Matrix S(n);
for (int i=0; i<n; i++) // Double boucle.
for (int j=0; j<n; j++)
S.tab[i][j] += tab[i][j]+M.tab[i][j]; //addition
return S;
}
dans le main quad j ai fais
main()
{ Matrix m(2);
cout<<"*************************";
Matrix m1(2);
Matrix C(2);
C=m+m1; // erreur ici
getch();
}
il y C=m+m1; erreur ici le meme probleme pour la soustraction et le produit .
un ami m'a dit il faut définir l'operateur = j ai fais avec aucun résultat merci de m'aider
j ai un projet d'addition ,soustraction et produit de 2 matrices carrés et quand j ai définie l'operateur +
Matrix Matrix:: operator+(Matrix &M)
{
Matrix S(n);
for (int i=0; i<n; i++) // Double boucle.
for (int j=0; j<n; j++)
S.tab[i][j] += tab[i][j]+M.tab[i][j]; //addition
return S;
}
dans le main quad j ai fais
main()
{ Matrix m(2);
cout<<"*************************";
Matrix m1(2);
Matrix C(2);
C=m+m1; // erreur ici
getch();
}
il y C=m+m1; erreur ici le meme probleme pour la soustraction et le produit .
un ami m'a dit il faut définir l'operateur = j ai fais avec aucun résultat merci de m'aider
A voir également:
- Operator + (addition daux 2 matrices cares )
- Supercopier 2 - Télécharger - Gestion de fichiers
- Formule addition excel - Guide
- 2 ecran pc - Guide
- Gta 6 trailer 2 - Guide
- Faire 2 colonnes sur word - Guide
6 réponses
Salut.
premièrement, ça serait sympa de mettre l'erreur produite, on gagnerai du temps.
à ta place, j'utiliserai plutôt la fonction :
const Matrix& operator+(const Matrix& a,const Matrix& b)
{...}
premièrement, ça serait sympa de mettre l'erreur produite, on gagnerai du temps.
à ta place, j'utiliserai plutôt la fonction :
const Matrix& operator+(const Matrix& a,const Matrix& b)
{...}
C:\Documents and Settings\anas88\Bureau\matrice.cpp In function `int main()':
36 C:\Documents and Settings\anas88\Bureau\matrice.cpp no matching function for call to `Matrix::Matrix(Matrix)'
note C:\Documents and Settings\anas88\Bureau\matrice.cpp:15 candidates are: Matrix::Matrix(Matrix&)
note C:\Documents and Settings\anas88\Bureau\matrice.cpp:15 Matrix::Matrix(int)
c'est l'erreur Mr . svpl tu peux m'aider?
36 C:\Documents and Settings\anas88\Bureau\matrice.cpp no matching function for call to `Matrix::Matrix(Matrix)'
note C:\Documents and Settings\anas88\Bureau\matrice.cpp:15 candidates are: Matrix::Matrix(Matrix&)
note C:\Documents and Settings\anas88\Bureau\matrice.cpp:15 Matrix::Matrix(int)
c'est l'erreur Mr . svpl tu peux m'aider?
il te dit que la construction par copie n'existe pas.
Le plus simple est de créer un constructeur par copie. Donne aussi ton operateur d'affectation Matrix::operator=
Essai de faire :
C=m1;
Si ça coince, c'est que l'erreur ne viens pas de l'addition.
Le plus simple est de créer un constructeur par copie. Donne aussi ton operateur d'affectation Matrix::operator=
Essai de faire :
C=m1;
Si ça coince, c'est que l'erreur ne viens pas de l'addition.
j ai testé mon constructeur de copie il marche bien . j ai fait C=m1 et ça marche aussi . je les désactive l'operator = car can active et désactive reste le meme probleme je pense je le besoin pas .
operateur =
void Matrix::operator=(Matrix M)
{
for(int i=0; i<n; i++) // on détruit...
delete[] tab[i];
delete[] tab;
n = M.n;
tab = new double*[n]; // allocations
for (int i=0; i<n; i++)
{
tab[i] = new double[n];
for(int j=0; j<n; j++)
for(int i=0; i<n; i ++)
for(int j=0; j<n; j ++)
tab[i][j] = M.tab[i][j];
}
}
constructeur de copie
Matrix::Matrix(Matrix &M)
{
n = M.n;
tab = new double*[n]; // allocations
for (int i=0; i<n; i++)
{
tab[i] = new double[n];
for(int j=0; j<n; j++)
tab[i][j] = M.tab[i][j]; //recopie
}
}
merci bcp ________________________________________
operateur =
void Matrix::operator=(Matrix M)
{
for(int i=0; i<n; i++) // on détruit...
delete[] tab[i];
delete[] tab;
n = M.n;
tab = new double*[n]; // allocations
for (int i=0; i<n; i++)
{
tab[i] = new double[n];
for(int j=0; j<n; j++)
for(int i=0; i<n; i ++)
for(int j=0; j<n; j ++)
tab[i][j] = M.tab[i][j];
}
}
constructeur de copie
Matrix::Matrix(Matrix &M)
{
n = M.n;
tab = new double*[n]; // allocations
for (int i=0; i<n; i++)
{
tab[i] = new double[n];
for(int j=0; j<n; j++)
tab[i][j] = M.tab[i][j]; //recopie
}
}
merci bcp ________________________________________
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
essai :
Matrix::Matrix(const Matrix &M)
à la place de
Matrix::Matrix(Matrix &M)
Le compilateur cherche le constructeur Matrix::Matrix(Matrix M) , ce qui est différent. C'est ce que je te disait de faire créer le constructeur de copie Matrix::Matrix(Matrix M)
Il faut faire attention en C++ aux différents type d'argument et de retour Matrix, const Matrix et Matrix&, chacun a un sens différent et il faut bien voir que C=m+m2; met en actions plusieurs variables temporaire qui vont utilisé différemment ces différents types.
Matrix::Matrix(const Matrix &M)
à la place de
Matrix::Matrix(Matrix &M)
Le compilateur cherche le constructeur Matrix::Matrix(Matrix M) , ce qui est différent. C'est ce que je te disait de faire créer le constructeur de copie Matrix::Matrix(Matrix M)
Il faut faire attention en C++ aux différents type d'argument et de retour Matrix, const Matrix et Matrix&, chacun a un sens différent et il faut bien voir que C=m+m2; met en actions plusieurs variables temporaire qui vont utilisé différemment ces différents types.