J'ai une classe matricielle et un opérateur surchargé + travaillant avec d'autres matrices et scalaires. Lorsque j'essaie de l'utiliser comme MAT2 = MAT + 3; cela fonctionne bien, mais si je change de scalaire et matrice MAT2 = 3 + tapis; Il dit "les opérandes non valides à une expression binaire (" int 'et matrice ') "(3,4 est des lignes et des colonnes dans cette matrice). Comment je comprends que je n'ai pas surchargé + pour ces cas, mais je ne trouve pas comment surcharger
Matrix operator+(const T &a) {
Matrix<row, col, T> result;
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
result.elements[i][j] = elements[i][j] + a;
}
}
return result;
}
3 Réponses :
Cette fonction est probablement dans votre classe. Mais comment pouvez-vous ajouter une surcharge à Prenez une profonde respiration et regardez le Différence entre exploitant global et opérateur membre surcharges. Vous pouvez réellement surcharger pour int code>? int code> même a em> une classe? Est-il temps de crier et de paniquer? int code> dans la portée globale, qui ressemblera probablement à: p>
Pour pouvoir utiliser
template <typename T>
Matrix<T> operator+(Matrix<T> const& mat, const T &a ) {
...
}
Suggestion: Définir quelque chose comme (ATTENTION: Code non testé et supposant observe que les deux opérateur + = () code> en tant que fonction membre de la classe mais définissez opérateur + () code> en tant que couple de fonctions externes ( ami code> à la classe, si nécessaire). Peut-être définir les fonctions opérateur + () code> à l'aide de l'opérateur + = () code> méthode pour éviter la duplication de code. Matrix code> a un constructeur de copie) p> opérateur + () code> reçoivent la matrice code> Valeur par copie . p> p>
Surcharger l'opérateur
+ code> pour prendre unint code> comme lvalue.Mais si j'ai surchargé cela avec T Ça ne fonctionne pas avec des types?
Related: Stackoverflow.com/a/11681308/179910 et Stackoverflow.com/a/20213363/179910