2010-08-10 9 views
2

Ma question est en relation avec this question.Fonction ami et modèles

#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(); 
} 

Pourquoi le code ci-dessus n'est-il pas compilé?

+2

ici: http://ideone.com/G6kcV. Lisez la note pour vous-même, il donne des instructions assez détaillées – jpalecek

+0

@jpalecek C'est un site très utile. –

Répondre

6

friend void Test(T1 &obj); déclare une fonction non template.

Déclarez-le en template.

Essayez ceci:

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