C++库存管理程序报错:无法将std::string存入字符串数组
C++库存管理程序赋值错误的解决方法
你的错误根源有两个核心问题:
- 类的私有成员
inventory被声明成了单个std::string对象,但你实际需要的是一个string数组指针。而createArr函数里又定义了一个同名的局部std::string* inventory,这个局部变量和成员变量完全无关,导致成员变量根本没指向你创建的数组。 - 在
addItem里,你访问的inventory是那个单个的std::string,用[]索引时,取的是这个string里的第N个字符(char类型),但你试图把另一个std::string赋值给char,这就触发了类型不匹配的错误。
修正步骤:
- 把私有成员的
std::string inventory改成std::string* inventory,用来存储数组的指针。 - 在
createArr里,不要重新定义局部的inventory,直接给成员变量赋值:inventory = new std::string[size]; - 添加析构函数,手动释放数组内存,避免泄漏。
- 初始化
size为0,防止未初始化的垃圾值导致判断错误。
修正后的完整代码:
#include <iostream> #include <string> class OurInventory{ private: int size = 0; // 初始化size为0 std::string* inventory = nullptr; // 初始化指针为空 public: ~OurInventory(){ // 析构函数释放数组内存 if(inventory != nullptr){ delete[] inventory; inventory = nullptr; size = 0; } } void createArr(){ std::cin >> size; // 直接给成员变量赋值,不再定义局部变量 inventory = new std::string[size]; std::cout << "Created array with size of " << size << std::endl; } void addItem(){ int userInputIndex; std::cin >> userInputIndex; if(userInputIndex >= size || userInputIndex < 0){ // 补充负数判断 std::cout << "Wrong value!" << std::endl; } else{ std::string userInputData; std::cin >> userInputData; inventory[userInputIndex] = userInputData; std::cout << "Added item: " << userInputData << " at index " << userInputIndex << std::endl; } } }; int main(){ OurInventory obj; obj.createArr(); obj.addItem(); return 0; }
额外说明:
- 补充了对负数索引的判断,避免越界访问。
- 添加了析构函数,确保程序结束时释放动态分配的数组内存,防止内存泄漏。
- 初始化了成员变量,避免未定义行为。
内容的提问来源于stack exchange,提问作者sweader
相关产品推荐
相关产品推荐

