Surcharge d'operator, classe et global operateur
bonjour, j'ai le problème suivant:
Soit 2 classes Matrice et Vector dérivant des boost ublas matrix et vector.
Pour permettre de comparer des objets Matrice et Vecteur entre eux mais également avec des constantes (une sorte d'element-wise operator), j'ai déclaré les operateurs suivant:
Pour les Vecteurs:
Code:
1 2 3 4 5 6 7 8
| Vector operator > (const Vector& roV);
Vector operator < (const Vector& roV);
Vector operator >= (const Vector& roV);
Vector operator <= (const Vector& roV);
friend Vector operator > (const Vector& roV, const double& roVal);
friend Vector operator < (const Vector& roV, const double& roVal);
friend Vector operator >= (const Vector& roV, const double& roVal);
friend Vector operator <= (const Vector& roV, const double& roVal); |
Pour les Matrices:
Code:
1 2 3 4 5 6 7 8 9 10
| Matrix operator > (const Matrix& roM);
Matrix operator < (const Matrix& roM);
friend Matrix operator > (const Matrix& roM, const double& roVal);
friend Matrix operator > (const double& roVal, const Matrix& roM);
friend Matrix operator < (const Matrix& roM, const double& roVal);
friend Matrix operator < (const double& roVal, const Matrix& roM);
friend Matrix operator >= (const Matrix& roM, const double& roVal);
friend Matrix operator >= (const double& roVal, const Matrix& roM);
friend Matrix operator <= (const Matrix& roM, const double& roVal);
friend Matrix operator <= (const double& roVal, const Matrix& roM); |
Il y a les opérateur 'member' des classes et les opérateurs 'friend' pour permettre de coder indifféremment: 1.5 > Vecteur ou Vecteur > 1.5
Mais sous VS'2008, à la compilation de:
je reçois l'erreur suivante:
Code:
1 2 3 4 5
| error C2666: 'Vector::operator >' : 3 overloads have similar conversions
could be 'Vector CMatlabVector::operator >(const Vector &)'
or 'Matrix operator >(const Matrix &,const double &)'
or 'Vector operator >(const Vector &,const double &)' [found using argument-dependent lookup]
while trying to match the argument list '(Vector, int)' |
Je ne vois pas comment le compilateur aboutit à ça.... à ma connaissance il n'y a pas d'operateur de conversion implicite de 'int' en Vector ou Matrix.
Est-ce que vous auriez une idée ?
Merci d'avance.
Alex.
opérateur interchangeable ... +/-!!!
les opérandes d'un opérateur sont "interchangeable" s' ils sont de même type... ou alors j'ai raté un truc!
Si la class C surcharge l'opérateur + via
Code:
C C::operator + (C&)
ou via un friend
Code:
C operator + (C& c1, C& c2)
mais si on veut déclarer l'opération
Code:
C + entier et entier + C
dans ce cas il faut au minimum 1 surcharge de l'opérateur global.
Code:
C operator + ( int, C&)
je me trompe ?