2010-08-10 139 views
2

我的问题与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(); 
} 

为什么上面的代码不能编译?

+2

这里:http://ideone.com/G6kcV。自己阅读说明,它给出了非常详细的说明 – jpalecek 2010-08-10 10:37:28

+0

@jpalecek这是一个非常有用的网站。 – 2010-08-10 10:49:34

回答

6

friend void Test(T1 &obj);声明non template函数。

声明它为template

试试这个:

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