Pemuatan berlebihan yang tidak jelas bagi << Operator untuk ostream
Ralat yang dihadapi semasa cuba membebankan << operator untuk kelas Matrix berpunca daripada keperluan bahawa fungsi operator mesti mengambil tepat satu hujah. Dalam kes ini, ralat mungkin disebabkan oleh kod berikut:
std::ostream& Matrix::operator <<(std::ostream& stream, const Matrix& matrix) { [...] }
Memandangkan operator<< fungsi ditakrifkan sebagai fungsi ahli kelas Matriks, ia secara tersirat mengambil objek Matriks sebagai hujah. Hasilnya, fungsi sebenarnya mengambil dua hujah: objek ostream dan objek Matrix.
Untuk menyelesaikan isu ini, anda mempunyai dua pilihan:
Gunakan fungsi rakan: Fungsi rakan bukan ahli kelas tetapi mempunyai akses kepada ahli peribadi dan dilindunginya. Dengan mentakrifkan operator<< berfungsi sebagai fungsi rakan, anda boleh mengelakkan hujah objek Matriks tersirat.
friend std::ostream& operator<< (std::ostream& stream, const Matrix& matrix) { [...] }
Pass objek Matrix sebagai rujukan: Dengan menghantar objek Matrix sebagai rujukan, anda boleh mengelakkan objek Matriks tersirat hujah.
std::ostream& operator<< (std::ostream& stream, const Matrix& matrix) const { [...] }
Perhatikan bahawa pilihan kedua memerlukan pengendali<< fungsi untuk diisytiharkan sebagai const kerana ia tidak mengubah suai objek Matriks.
Atas ialah kandungan terperinci Mengapa Kelas Matriks Saya `. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!