You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++库存管理程序报错:无法将std::string存入字符串数组

C++库存管理程序赋值错误的解决方法

你的错误根源有两个核心问题:

  1. 类的私有成员inventory被声明成了单个std::string对象,但你实际需要的是一个string数组指针。而createArr函数里又定义了一个同名的局部std::string* inventory,这个局部变量和成员变量完全无关,导致成员变量根本没指向你创建的数组。
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:05:14