如何用PrintNodeData()输出shoppingList内容?C++链表问题求助
修正C++链表输入与输出的代码问题
原代码存在的问题
- 输入结束判断逻辑错误:错误尝试通过字符ASCII值判断输入是否为"-1",实际应直接对比字符串内容
- 链表遍历方式错误:
std::list不支持随机访问,不能用下标[]访问元素 - 成员函数调用错误:调用
PrintNodeData时未加括号,无法触发函数执行 - 类实现代码不完整:
ListItem.cpp中PrintNodeData函数缺少闭合大括号
修正后的完整代码
main.cpp
#include "ListItem.h" #include <string> #include <list> #include <iostream> using namespace std; int main() { list<ListItem> shoppingList; string item; // 读取输入直到输入"-1"结束 do { getline(cin, item); if (item == "-1") break; shoppingList.push_back(ListItem(item)); } while (true); // 遍历链表并打印每个元素 // 方式1:使用迭代器遍历 for (list<ListItem>::iterator it = shoppingList.begin(); it != shoppingList.end(); ++it) { it->PrintNodeData(); } // 方式2:C++11及以上可用范围for循环 // for (auto& listItem : shoppingList) // { // listItem.PrintNodeData(); // } return 0; }
ListItem.cpp
#include "ListItem.h" #include <iostream> ListItem::ListItem() { item = ""; } ListItem::ListItem(string itemInit) { item = itemInit; } void ListItem::PrintNodeData() { cout << item << endl; } // 补充缺失的闭合大括号
ListItem.h(无需修改)
#ifndef LISTITEMH #define LISTITEMH #include <string> using namespace std; class ListItem { public: ListItem(); ListItem(string itemInit); void PrintNodeData(); private: string item; }; #endif
关键修正说明
- 输入判断逻辑:将原错误的
item[item.length()-1] == -1改为item == "-1",直接判断输入字符串是否为结束标记 - 链表遍历:使用
std::list的迭代器或范围for循环遍历元素,适配链表的双向访问特性,避免随机访问的错误 - 函数调用:确保调用成员函数时添加括号
PrintNodeData(),正确触发函数执行 - 代码完整性:补充
ListItem.cpp中PrintNodeData函数的闭合大括号,修复编译错误
内容的提问来源于stack exchange,提问作者Bantex
相关产品推荐
相关产品推荐

