如何使用 C++ 中的友元函数将成员变量从一个 class 访问到另一个成员变量?
How do I access member variables from one class into other using friend functions in C++?
我一直在使用 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.I 的商品的详细信息,我收到一个错误,指出 num_Of_Items 未在此范围内声明,并建议进行任何编辑(如果有) required.Thanks.
你的代码问题很少,都在这个函数中:
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
class 中名称为 num_Of_Items
的静态变量,但没有这样的变量。您在这里想要的是使用 s.
从类型为 store
的 s
中读取 num_Of_Items
。您已与 store
成为 store_keeper
的好友,所以这是合法的
3 和 4 - items
是 store
class 中的字段,它作为参数 s
提供给您的函数,所以使用 s.
访问它。
最后 item
有一个 print
而不是 print_details
这将允许您的代码编译,但可能需要做更多的工作才能使其按预期工作。
我一直在使用 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.I 的商品的详细信息,我收到一个错误,指出 num_Of_Items 未在此范围内声明,并建议进行任何编辑(如果有) required.Thanks.
你的代码问题很少,都在这个函数中:
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
class 中名称为 num_Of_Items
的静态变量,但没有这样的变量。您在这里想要的是使用 s.
从类型为 store
的 s
中读取 num_Of_Items
。您已与 store
成为 store_keeper
的好友,所以这是合法的
3 和 4 - items
是 store
class 中的字段,它作为参数 s
提供给您的函数,所以使用 s.
访问它。
最后 item
有一个 print
而不是 print_details
这将允许您的代码编译,但可能需要做更多的工作才能使其按预期工作。