2010-08-10 6 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

+0

@jpalecek 아주 유용한 사이트입니다. –

답변

6

friend void Test(T1 &obj);non template 기능을 선언합니다.

template으로 지정하십시오. 여기

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