2017-02-28 103 views
0

我正在使用炒功能的时间,并被分配到使用下面的朋友功能完成不完整的代码。如何在C++中使用朋友函数从一个类访问成员变量?

//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); 
} 

我不得不以显示其在现有库存量小于这段时间我得到那个NUM_OF_ITEMS不是在这个范围内声明,如果任何required.Thanks提出任何修改错误项的细节。

+0

您需要*实例*,*对象*才能访问对象成员变量。在'stock_mgmt'函数中,您没有任何'store'对象。 –

+0

所以,我需要做正确的store_keeper :: num_Of_Items来存储:: num_Of _Items –

+0

在'stock_mgmt'函数中,你需要一个命名参数。然后使用参数作为对象。 –

回答

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它认为您想访问store_keeper类中的名称num_Of_Items的静态变量,但不存在这样的变量。你在这里想要的是使用s.来从s读取num_Of_Items,这是store类型。你已经结识store_keeperstore所以这是合法的

3和4 - itemsstore类,它提供给你的函数作为参数s一个领域,所以使用s.来访问它。

最后itemprint而不是print_details

这将使你的代码编译,但可能需要更多的工作,以使其正常工作。

+0

非常感谢..它的工作!我已经做了必要的修改 –

相关问题