Piszę małą bibliotekę macierzy w C++ dla operacji macierzowych. Jednak mój kompilator narzeka, gdzie wcześniej nie. Kod ten pozostawiono na półce przez 6 miesięcy, aw międzyczasie uaktualniłem swój komputer z debian etch do lenny (g ++ (Debian 4.3.2-1.1) 4.3.2 ) jednak mam taki sam problem w systemie Ubuntu z tym samym g ++.Jak poprawnie przeciążyć operator << dla ostream?
Oto odpowiednia część mojej klasy matrycy:
namespace Math
{
class Matrix
{
public:
[...]
friend std::ostream& operator<< (std::ostream& stream, const Matrix& matrix);
}
}
I "realizacja":
using namespace Math;
std::ostream& Matrix::operator <<(std::ostream& stream, const Matrix& matrix) {
[...]
}
Jest to błąd podane przez kompilator:
matrix.cpp:459: error: 'std::ostream& Math::Matrix::operator<<(std::ostream&, const Math::Matrix&)' must take exactly one argument
Jestem nieco zdezorientowany tym błędem, ale znowu moje C++ stało się trochę zardzewiałe po wykonaniu wielu Javy tych 6 mon ths. :-)
Powinieneś również zadeklarować to w przestrzeni nazw Math (nie tylko przy użyciu Math w przestrzeni nazw). –
Dlaczego 'operator <<' musi znajdować się w przestrzeni nazw 'Math'? Wygląda na to, że powinien znajdować się w globalnej przestrzeni nazw. Zgadzam się, że mój kompilator chce, aby znajdował się w przestrzeni nazw 'Math', ale to nie ma dla mnie sensu. –