王月半子吃茶 2024-06-05 16:47 采纳率: 28.6%
浏览 12

求解!为什么vector容器作全局变量报错?

vector容器作全局变量报错

img

img


为什么vector容器设为全局变量的时候会报错?求正解!

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-05 16:47
    关注

    引自免费微信小程序:皆我百晓生

    在您的代码中,错误发生在第119行,当您尝试将Commodity cl对象添加到全局变量Cmd时。从错误信息来看,似乎编译器找不到合适的构造函数或赋值运算符来初始化或复制Cmd。这可能是由于您没有提供Commodity类的定义,导致编译器无法确定如何处理这个类型。

    为了帮您解决这个问题,我需要查看Commodity类的定义。但是,我可以根据您提供的部分代码推测可能的问题所在,并给出一些可能的解决方案。

    首先,确保Commodity类有一个默认的构造函数,这样您可以创建一个不带参数的对象。例如:

    class Commodity {
    public:
        Commodity() {} // 默认构造函数
    
        // 其他成员变量和成员函数
    };
    

    其次,确保Commodity类支持拷贝构造函数和赋值运算符,因为push_back()方法可能会使用它们。对于C++11及以后版本,可以使用默认的移动语义,但为了兼容性,最好显式地定义拷贝构造函数和赋值运算符:

    class Commodity {
    public:
        Commodity(const Commodity& other) { /* 拷贝构造函数实现 */ } 
        Commodity& operator=(const Commodity& other) { /* 赋值运算符实现 */ return *this; }
    
        // 其他成员变量和成员函数
    };
    

    如果您不想深拷贝对象,也可以使用移动构造函数和移动赋值运算符(仅适用于C++11及以上版本):

    class Commodity {
    public:
        Commodity(Commodity&& other) noexcept { /* 移动构造函数实现 */ }
        Commodity& operator=(Commodity&& other) noexcept { /* 移动赋值运算符实现 */ return *this; }
    
        // 其他成员变量和成员函数
    };
    

    此外,确保在包含头文件#include <vector>之后,再声明全局变量Cmd,这样编译器就知道了vector<Commodity>的完整类型。

    这里是修复后的代码片段:

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    class Commodity {
    public:
        Commodity() {}
        Commodity(const Commodity& other) { /* 拷贝构造函数实现 */ }
        Commodity& operator=(const Commodity& other) { /* 赋值运算符实现 */ return *this; }
    
        // 其他成员变量和成员函数
    };
    
    vector<Commodity> Cmd; // 在包含头文件之后声明全局变量
    
    int main() {
        // 商品类型类
        class TypeOfCommdity {
            // 类定义...
        };
    
        int cnum;
        string tcname, cprice, spcode, spname, sptnum;
        
        // 假设AddCommodity函数返回一个Commodity对象
        Commodity c1 = AddCommodity(cnum, tcname, cprice, spcode, spname, sptnum);
        
        Cmd.push_back(c1);
    
        printCommodity(Cmd);
    
        return 0;
    }
    

    如果仍然有错误,请确认AddCommodity函数返回一个有效的Commodity对象,并且printCommodity函数接受并正确处理vector<Commodity>作为参数。如果问题依然存在,请提供完整的Commodity类定义以及AddCommodityprintCommodity函数的实现,以便我能更准确地帮助您。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月5日

悬赏问题

  • ¥15 三分类机器学习模型可视化分析
  • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)
  • ¥50 Qt在release捕获异常并跟踪堆栈(有Demo,跑一下环境再回答)
  • ¥30 python,LLM 文本提炼
  • ¥15 关于将inet引入的相关问题
  • ¥15 关于一个倒计时的操作和显示设计
  • ¥15 提问STK的问题,哪位航天领域的同学会啊
  • ¥15 苹果系统的mac m1芯片的笔记本使用ce修改器使用不了
  • ¥15 单相逆变的电压电流双闭环中进行低通滤波PID算法改进
  • ¥15 关于#java#的问题,请各位专家解答!