Функция друга и шаблоны - PullRequest
2 голосов
/ 10 августа 2010

Мой вопрос связан с этим вопросом.

#include<iostream>
template< typename T >
class T1 {
public:
    T i;
    void display()
    {
       std::cout<<i<<"\n"<<j<<"\n"<<k; 
 }
protected:
    T j;
private:
    T k;
    friend void Test( T1 &obj);
};

template<typename T>
void Test(T1<T> &obj)
{
    T a=T();

    obj.i=a;
    obj.j=a;
    obj.k=a;
}


int main()
{
   T1<int>a;
   Test(a);
   a.display();
}

Почему вышеприведенный код не компилируется?

1 Ответ

6 голосов
/ 10 августа 2010

friend void Test( T1 &obj); объявляет функцию non template.

Объявляет ее как template.

Попробуйте:

....
private:
T k;
template<typename U>
  friend void Test( T1<U> &obj);
};
...