2011-06-06 94 views
2
#include< iostream> 
using namespace std; 

template< class t> 
class X 
{ 
    private: 
     t x;  

    public: 
     template< class u> 
     friend u y::getx(X< u>); 

     void setx(t s) 
     {x=s;} 
      };  

class y 
{ 
public: 
    template< class t> 
    t getx(X< t> d) 
    {return d.x;}  
}; 

int main() 
{ 
    X< int> x1; 
    x1.setx(7); 
    y y1; 
    cout<< y1.getx(x1);  
    return 0; 
}  

上述程序的朋友,在編譯時,顯示出一個錯誤,y既不是函數,也不是一個成員函數,因此它不能被聲明的朋友。如何將getx作爲朋友加入X聲明類的成員函數作爲模板類

回答

1

你應該 「前進申報」 Y級之前的模板類X.即,只要把:

Y級; //向前聲明

模板 類X ...

2

你必須安排類,以便聲明爲一個朋友的功能是十級之前居然看見你也必須做在y之前X可見。 ..

template< class t> 
class X; 

class y 
{ 
public: 
    template< class t> 
    t getx(X< t> d) 
    {return d.x;}  
}; 

template< class t> 
class X 
{ 
    private: 
     t x;  

    public: 
     template< class u> 
     friend u y::getx(X< u>); 

     void setx(t s) 
     {x=s;} 
};  
+0

但我已經定義的類在y之前全班X ....是向前聲明必需....它有什麼作用 – avinash 2011-06-06 15:04:16

+0

@avinash - 爲了能夠使功能的朋友,該功能必須可見,這意味着類y必須可見,因爲函數是成員。當聲明該成員函數時,類X必須在那裏可見,因爲它是一個參數。前向聲明表示X是一個類模板,在這一點上就足夠了。 – 2011-06-06 15:12:30

相關問題