我做了以下代码,其中数据和进程是两个类,我试图通过使它们成为数据类的朋友来在进程类的函数中使用数据类对象的变量。
class data;
class process
{
public:
void rarea(data ob);
void carea(data ob);
};
void process::rarea(data ob)
{
int a;
a=ob.l*ob.b;
cout<<a;
}
void process::carea(data ob)
{
int a;
a=3.14*ob.r*ob.r;
cout<<a;
}
class data
{
int l,b,r;
public:
void input()
{
cin>>l>>b>>r;
}
friend void process::carea(data);
friend void process::rarea(data);
};
int main()
{
data d;
process p;
d.input();
p.carea(d);
p.rarea(d);
}
但是编译器出错了。
错误:'ob'的类型不完整
错误:转发数据声明
答案 0 :(得分:0)
rarea
和carea
的定义需要访问data
的定义,或者他们不知道自己的定义。
他们的声明没有,所以如果你只是重新安排一下它会起作用:
class data;
class process
{
public:
void rarea(data ob);
void carea(data ob);
};
class data
{
int l,b,r;
public:
void input()
{
cin>>l>>b>>r;
}
friend void process::carea(data);
friend void process::rarea(data);
};
void process::rarea(data ob)
{
//...
}
void process::carea(data ob)
{
//...
}