2010-08-10 111 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); 
};