我写了这段代码,但朋友的功能不起作用(foodmoney和hobbymoney没有在我的朋友功能中声明。我的错误在哪里?
#include <iostream>
using namespace std;
class myBase
{
private:
int friendvar;
int foodmoney;
int hobbymoney;
public:
void setdata();
myBase(){friendvar=0;}
friend void caldata(myBase &mbo);
};
void myBase::setdata()
{
cout<<"Enter foodmoney :" ;cin>>foodmoney;
cout<<"enter hoobymoney:";cin>>hobbymoney;
}
void caldata(myBase &mbo)
{
mbo.friendvar=(foodmoney+hobbymoney)/2;
cout<<mbo.friendvar<<endl;
}
int main()
{
myBase baseobj;
baseobj.setdata();
myBase friends;
caldata(friends);
return 0;
}
答案 0 :(得分:3)
mbo.friendvar=(foodmoney+hobbymoney);
应该是
mbo.friendvar=(mbo.foodmoney+mbo.hobbymoney);
等。等
朋友功能不成员函数,因此他们无权访问任何特定对象。您必须指定要访问的对象(在您的情况下使用mbo
)。
话虽如此,我看不出任何有理由为什么caldata是朋友的功能。为什么不把它变成普通的会员功能呢?或者也许你应该把它变成一个有两个参数的朋友函数?很难说你想在这里实现什么。
答案 1 :(得分:1)
更改
cin>>foodmoney;
到
cin>>mbo.foodmoney;
并更改
cin>>hobbymoney;
到
cin>>mbo.hobbymoney;
答案 2 :(得分:0)
您的代码根本无法编译。修复程序已描述。但是要使ti完整:
正如您使用friendvar
引用mbo.friendvar
一样,对foodmoney
和hobbymoney
做同样的事情。
您还没有在构造函数中初始化foodmoney
和hobbymoney
。因此,在致电caldata(friends);
时,您会在屏幕上看到随机结果。
最后:您用myBase friends;
实例化了新对象,因此这是一个全新的对象,不受先前setdata()
调用的影响。
您对此功能的底层要求未在您的问题中定义,我无能为力。