如何在C ++中使用友元函数从一个类访问成员变量到其他类?

时间:2017-02-28 16:58:01

标签: c++ class oop friend friend-function

我正在使用Fried函数,并被分配使用朋友函数完成不完整的代码,如下所示。

//CODE GIVEN IN THE QUESTION NOT MEANT TO BE EDITED
#include<iostream>
using namespace std;
class store_keeper;
class item
{
    char prod_name[30];
    char prod_code[10];
    float prod_price;
    int stock_In_Hand;
    public:
    void get();
    void print()const;
    friend class store_keeper;
};
class store
{
    int num_Of_Items;
    item items[20];
    public:
    void get_details();
    void print_details() const;
    friend class store_keeper;
};
class store_keeper
{
    char name[30];
    char id[10];
    public:
    void get();
    void print();
    void stock_mgmt(store &);
};
//MY CODE
void item::get()
{
cin>>prod_name>>prod_code>>prod_price>>stock_In_Hand;
}
void item::print() const
{
    cout<<prod_name<<prod_code<<prod_price<<stock_In_Hand;
}
void store::get_details()
{
    cin>>num_Of_Items;
    for(int i=0;i<num_Of_Items;i++)
    {
        items[i].get();
    }

}
void store::print_details() const
{
    for(int j=0;j<num_Of_Items;j++)
    {
        items[j].print();
    }

}
void store_keeper::stock_mgmt(store &s)
{
    for(int k=0;k<s.num_Of_Items;k++)
    {
        if(items[k].stock_In_Hand<10)
        {
            s.print_details();
        }
    }
}
//CODE GIVEN IN THE QUESTION NOT MEANT TO BE EDITED
main()
{
    store s;
    store_keeper sk;
    s.get_details();
    sk.stock_mgmt(s);
}

我必须显示手头库存小于10的商品的详细信息。我收到错误,在此范围内未声明num_Of_Items,如果需要,建议进行任何修改。谢谢。

1 个答案:

答案 0 :(得分:1)

您的代码几乎没有问题,它们都位于此功能中:

void store_keeper::stock_mgmt(store &s)
                                     ^ ~~~~~~ 1
{
    for(int k=0;k<s.num_Of_Items;k++)
    {             ^^^^^^^^^^^^^^~~~~~~~~~~~~~ 2 
        if(s.items[k].stock_In_Hand<10)
        {  ^^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3
            s.items[k].print();
        }   ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4
    }
}

1 - 您需要在函数内部为此参数指定名称

2 - 当编译器看到store_keeper::num_Of_Items时,它认为你想在num_Of_Items类中访问名为store_keeper的静态变量,但是没有这样的变量。您希望在此处使用s.来阅读num_Of_Items s store类型store_keeper。您与store成为items的朋友,这是合法的

3和4 - stores类中的字段,作为参数s.提供给您的函数,因此请使用item来访问它。

最后print有一个print_details而不是x += x + 1

这将允许您的代码进行编译,但可能需要做更多工作才能使其按预期工作。