这里我试图覆盖inventory对象,但是当我运行第二个std::cout
它再次打印旧值时,我希望它写入输入值。
#include <iostream>
#include <string>
class inventory
{
private:
std::string item;
int onhand;
double cost;
public:
inventory(std::string i, int o, double c){
item = i;
onhand = o;
cost = c;
}
friend std::ostream& operator<<(std::ostream& stream, inventory entity){
stream << entity.item << "\t" << entity.onhand << "\t" << entity.cost << std::endl;
return stream;
}
friend std::istream& operator>>(std::istream& stream, inventory entity){
stream >> entity.item >> entity.onhand >> entity.cost;
return stream;
}
};
int main()
{
inventory obj("hammer", 12, 2000);
std::cout << obj;
std::cin >> obj;
std::cout << obj;
return 0;
}
您面临的问题是,您按值传递Inventory Obj
您需要的是将其作为引用传递,如下所示:
朋友std::istream(&S; 操作员>>(std::iStream&stream,inventory&Entity)
您的运算符>>
接受对象的副本并修改该副本。 您需要通过引用传递:
friend std::istream& operator>>(std::istream& stream, inventory entity);