为什么C++中PrintMenu函数无法识别main()内创建的ShoppingCart对象
问题原因
你遇到的编译报错属于C++变量作用域规则导致的问题:在main函数内部声明的ShoppingCart cart是main的局部变量,仅在main函数的代码范围内可访问,你独立封装的PrintMenu函数不在main的作用域内,自然无法识别cart对象。
解决方案
只需要两步修改即可解决这个问题:
- 修改
PrintMenu的函数定义,新增ShoppingCart类型的引用参数,这样可以直接操作传入的购物车对象,不会生成额外副本:
// 将原来的 void PrintMenu() 替换为以下定义 void PrintMenu(ShoppingCart& cart) { // 原有函数内部逻辑保持不变即可 }
- 修改main函数中调用PrintMenu的代码,把创建好的cart对象作为参数传入:
// 将原来的 PrintMenu(); 替换为以下代码 PrintMenu(cart);
其他注意事项
你的现有代码还存在几个隐藏问题,可以提前修复避免后续报错:
ItemToPurchase.h中存在拼写错误:GetDiscription应为GetDescription,和成员变量itemDescription对应ShoppingCart类的RemoveItem函数逻辑有误:找到匹配商品删除后需要加break终止循环,否则删除元素后继续遍历会出现下标越界问题;另外输出「Item not found」的逻辑位置不对,应该是遍历完所有商品都没找到再输出,而不是第一个不匹配就输出ItemToPurchase.h中声明的SetDescription为const成员函数,但是该函数需要修改itemDescription成员变量,需要去掉const修饰符
内容的提问来源于stack exchange,提问作者Eli
相关产品推荐
相关产品推荐

