Maison >développement back-end >C++ >Pourquoi ma classe Matrix `
Surcharge ambiguë de << Opérateur pour ostream
L'erreur rencontrée lors de la tentative de surcharge du << L’opérateur pour une classe Matrix découle de l’exigence selon laquelle la fonction opérateur doit prendre exactement un argument. Dans ce cas, l'erreur est probablement due au code suivant :
std::ostream& Matrix::operator <<(std::ostream& stream, const Matrix& matrix) { [...] }
Puisque l'opérateur<< La fonction est définie comme une fonction membre de la classe Matrix, elle prend implicitement l'objet Matrix comme argument. De ce fait, la fonction prend en fait deux arguments : l'objet ostream et l'objet Matrix.
Pour résoudre ce problème, vous avez deux options :
Utiliser une fonction ami : Une fonction ami n'est pas membre de la classe mais a accès à ses membres privés et protégés. En définissant l'opérateur<< fonctionner comme une fonction amie, vous pouvez éviter l'argument implicite de l'objet Matrix.
friend std::ostream& operator<< (std::ostream& stream, const Matrix& matrix) { [...] }
Passez l'objet Matrix comme référence : En passant l'objet Matrix comme une référence, vous pouvez éviter l'argument implicite de l'objet Matrix.
std::ostream& operator<< (std::ostream& stream, const Matrix& matrix) const { [...] }
Notez que la deuxième option nécessite le opérateur≪≪ fonction à déclarer comme const puisqu'elle ne modifie pas l'objet Matrix.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!