m_avrina
@m_avrina
Студентота.

Почему не видит перегрузку оператора потока вывода?

привет всем!

Собственно пытаюсь сделать контейнерный класс, но почему-то программа крашиться.
Так же при перегрузке оператора << не видит классовых перменных

using namespace std;

template <typename T>
class matrix
{
private:
    T* Matrix;
    int _col;
public:

    class Iterator;
    matrix(int n=1):_col(n)
    {
        Matrix=new T[n];
    }
    T&operator[](const int&n)
    {
        if(n>0&&n<_col)
        return Matrix[n];
    }
    Iterator begin(){return Matrix;}
    Iterator end(){return Matrix+_col;}
    friend ostream&operator <<(ostream&s,const matrix<T>&n);
    class Iterator
    {
    public:
        T*cur;
        Iterator(T*first):cur(first)
        {}
        T&operator +(int n){return *(cur+n);}
        T&operator -(int n){return *(cur-n);}
        T&operator ++(int){return *cur++;}
        T&operator --(int){return *cur--;}
        T&operator ++(){return *++cur;}
        T&operator --(){return *--cur;}
        bool operator != (const Iterator&it){return cur!=it.cur;}
        bool operator ==(const Iterator&it){return cur==it.cur;}
        T& operator*(){return *cur;}
    };
};
ostream&operator <<(ostream&s,const matrix<T>&n)
    {
        s<<Matrix[n];
        return s;
    }


int main()
{
    matrix <char*>Matrix(3);
    Matrix[0]="str1";
    Matrix[1]="str2";
    Matrix[3]="str2";
    auto it=matrix<char*>::Iterator(Matrix.begin());
    while(it!=Matrix.end())
    {
        cout<<*it<<endl;
        it++;
    }

    _getch();
    return 0;
}
  • Вопрос задан
  • 258 просмотров
Пригласить эксперта
Ответы на вопрос 2
Nipheris
@Nipheris Куратор тега C++
Т.к. вы реализуете оператор << в форме внешней функции, то и при доступе к полям объекта нужно указывать конкретный экземпляр объекта, например s.Matrix. Во внешней функции у вас нет и не может быть this, а значит и нет полей объекта в скоупе функции.
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
ostream&operator <<(ostream&s,const matrix<T>&n)

Второй параметр этой функции -- шаблон. Откуда возьмётся его параметр T?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы