Не работает operator-друг с шаблонным классом.
От: Melo_AG  
Дата: 14.10.02 16:45
Оценка:
При попытке перегрузить оператор << для шаблонного класса компилятор выдает сообщение, что закрытые члены класса не доступны, хотя функция operator<< объявлена дружественной данному шаблонному классу. Ума не приложу — что не так?

using namespace std;

template <class T> class MyMatrix;

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);
        //...

}

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;
}

void main()
{
    MyMatr<int> mmatr(5,5);
    cout<<mmatr; //точка инстанцирования оператора <<

}


Для простоты все это объявленно в одном файле.
Причем разные компилеры "ругаются" по-разному. Например у BC 5.5 вообще линкер выбрасывает ошибку при попытке инстанцирования. Зараннее признателен всем, кто поможет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.