Re: Не работает operator-друг с шаблонным классом.
От: Павел Кузнецов  
Дата: 14.10.02 16:58
Оценка: 13 (2)
Здравствуйте Melo_AG, Вы писали:

MA>При попытке перегрузить оператор << для шаблонного класса компилятор выдает сообщение, что закрытые члены класса не доступны, хотя функция operator<< объявлена дружественной данному шаблонному классу. Ума не приложу — что не так?


<...>

operator << тоже является шаблоном:

#include <iostream>
#include <vector>

using namespace std;

template <class T> class MyMatrix;

template <class T> 
ostream& operator<<(ostream& os, MyMatrix<T>& m);

template <class T> class MyMatrix
{
    vector<vector<T> > Matr;
        int Rows, Columns;
        //...

 public:
        //...

  friend ostream& operator<<(ostream& os, MyMatrix<T>& m);
  // вообще-то "правильнее":
  // friend ostream& operator<< <T>(ostream& os, MyMatrix<T>& m);
  // но VC++6.0 этого "не поймет"

        //...
};

template <class T> ostream& operator<<(ostream& os, MyMatrix<T>& m)
{
    for ( int i=0; i<m.Rows; i++ )
    {
        for ( int j=0; j<m.Columns; j++ ) os<<m.Matr[i][j]<<'\t';
        os<<endl;
    }
    return os;
}

int main()
{
    MyMatrix<int> mmatr;
    cout<<mmatr; //точка инстанцирования оператора <<
    return 0;
}
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.