在这段代码中,我已经制作了A类B级朋友的max函数。我也做了B类的前向声明。但是它给出了错误。
#include<iostream>
using namespace std;
class B;
class A
{
int a;
public:
void get()
{
cin>>a;
}
friend void B :: max(A , B);
};
class B
{
int b;
public:
void get()
{
cin>>b;
}
void max(A x, B y)
{
if (x.a > y.b)
cout<< " x is greater";
else cout<<"y is greater";
}
};
int main()
{
A x;
B y,c;
x.get();
y.get();
c.max(x,y);
}
答案 0 :(得分:2)
R Sahu 已经回答:
你不能使用:
friend void B :: max(A , B);
没有B的完整定义。
这是您实现目标的方法:
#include<iostream>
using namespace std;
class A;
class B{
int b = 2;
public:
void max(A x, B y);
};
class A{
int a = 1;
public:
friend void B :: max(A , B);
};
void B::max(A x, B y){
if (x.a > y.b)
cout<< " x is greater";
else
cout<<"y is greater";
}
int main(){
A x;
B y,c;
c.max(x,y);
}
答案 1 :(得分:2)
B
声明为朋友方法时, B::max
不完整。因此,编译器不知道是否存在这样的方法。
这意味着您需要
A
知道B
有方法B::max
和B::max
,因为您访问内部变量。 通过const引用传递参数也是一个好主意。使用const
强调您没有修改它们。通过引用传递,以避免不必要的复制。
所以,考虑到这一点:
class A;
class B{
int b;
public:
void get(){
cin>>b;
}
void max(const A& x, const B& y);
};
class A{
int a;
public:
void get(){
cin>>a;
}
friend void B :: max(const A& , const B&);
};
void B::max(const A& x, const B& y) {
if (x.a > y.b)
cout<< " x is greater";
else
cout<<"y is greater";
}
答案 2 :(得分:1)
你不能使用:
friend void B :: max(A , B);
没有B
的完整定义。
您需要重新考虑您的策略,以便您可以在不使用friend
声明的情况下实现功能,或者在B
的定义之前移动A
的定义。