vector容器作全局变量报错
为什么vector容器设为全局变量的时候会报错?求正解!
引自免费微信小程序:皆我百晓生
在您的代码中,错误发生在第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
类定义以及AddCommodity
和printCommodity
函数的实现,以便我能更准确地帮助您。