Q:

Реализация шаблона Friend функции потока вывода

<Heder.h>   
//объявление
friend ostream& operator <<(ostream &, matrix<T> &);
//реализация 
template<typename T>
 ostream& operator << (ostream &os, matrix<T> &obj)
{
    for (int i = 0; i < obj.row; i++)
    {
        for (int j = 0; j < obj.col; j++)
            os << setw(4) << obj.p[i][j];
        os << endl;
    }
    os << endl;

    return os;
}

Ошибка:

Error 1   error LNK2019: unresolved external symbol "class std::basic_ostream > & __cdecl operator<<(class std::basic_ostream > &,class matrix &)"

A:

Вот тут есть примеры как реализовать то, что вам нужно. Это первая ссылка которая гуглится по запросу "friend function for template class c++"
Вариант 1:
template<typename T>
class matrix
{
public:
    // ...
    template<typename T2>
    friend std::ostream& operator<<(std::ostream& os, const matrix<T2>& obj);
    // ...
};

template<typename T>
std::ostream& operator<<(std::ostream& os, const matrix<T>& obj)
{
    for (int i = 0; i < obj.row; i++)
    {
        for (int j = 0; j < obj.col; j++)
            os << setw(4) << obj.p[i][j];
        os << endl;
    }
    os << endl;

    return os;
}

Вариант 2:
template<typename T>
class matrix
{
public:
    // ...
    friend std::ostream& operator<<(std::ostream& os, const matrix& obj)
    {
        for (int i = 0; i < obj.row; i++)
        {
            for (int j = 0; j < obj.col; j++)
                os << setw(4) << obj.p[i][j];
            os << endl;
        }
        os << endl;

        return os;
    }
    // ...
};

