#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
作为朋友包含的方法是什么?
答案 0 :(得分:2)
你必须安排这些类,以便声明为朋友的函数在类X之前实际可见。你还必须在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;}
};
答案 1 :(得分:1)
你应该在模板类X之前“转发声明”类y。即,只需输入:
y级; //前向声明
模板 X级......