我的问题与 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(); }
为什么上面的代码不能编译?
friend void Test( T1 &obj); 声明一个 non template 功能。
friend void Test( T1 &obj);
non template
声明为 template .
template
试试这个:
.... private: T k; template<typename U> friend void Test( T1<U> &obj); };