-2

我写了这段代码,但朋友功能不起作用(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;
}
4

3 回答 3

3
mbo.friendvar=(foodmoney+hobbymoney);

应该

mbo.friendvar=(mbo.foodmoney+mbo.hobbymoney);

等等等等

Friend 函数不是成员函数,因此它们没有对任何特定对象的特殊访问权限。您必须指定要访问的对象(mbo在您的情况下使用)。

话虽如此,我看不出 caldata 是朋友功能的任何充分理由。为什么不让它成为一个普通的成员函数呢?或者也许你应该让它成为一个有两个参数的友元函数?很难说你想在这里实现什么。

于 2013-03-24T07:18:30.363 回答
1

改变

 cin>>foodmoney;

cin>>mbo.foodmoney;

和改变

cin>>hobbymoney;

cin>>mbo.hobbymoney;
于 2013-03-24T07:22:01.137 回答
0

您的代码根本无法编译。修复已经描述过了。但是要使 ti 完整:正如您所引用的friendvarusing ,对andmbo.friendvar执行相同的操作。foodmoneyhobbymoney

此外,您还没有初始化foodmoney并且hobbymoney在您的构造函数中。因此,在您给caldata(friends);您的电话中,随机结果会打印在屏幕上。最后:您使用实例化新对象,myBase friends;因此这是不受先前调用影响的全新对象setdata()

您的问题中没有定义您对此功能的低级要求,我无法提供更多帮助。

于 2019-07-25T06:27:20.463 回答