我的问题与this问题有关。
#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();
}
为什么上面的代码没有编译?
答案 0 :(得分:6)
friend void Test( T1 &obj);
声明non template
函数。
将其声明为template
。
试试这个:
....
private:
T k;
template<typename U>
friend void Test( T1<U> &obj);
};