试图创建对象列表,操作符=给了我麻烦
Trying to create list of objects, operator = is giving me trouble
考虑以下类:
class Subject
{
private:
char* name; // I must use char pointers, it's for school.
int grade;
public:
Subject() {
name = NULL;
grade = 0;
}
Subject(char *n, int g) {
name = new char[strlen(n)];
strcpy(name,n);
grade = g;
}
~Subject() {
delete name;
}
void operator=(const Subject &obj) {
strcpy(name, obj.name);
grade = obj.grade;
}
}
是一个非常简单的数据结构,具有特殊的功能。我的新重载操作符,因此可能无法正确实现。现在,我要做的就是把这些对象做成一个简单的数组。考虑我的main函数:
Subject *collection = new Subject[3];
char tmp[100];
int grade;
for(int i = 0 ; i < 3; i ++){
cin >> tmp;
cin >> grade;
collection[i] = new Subject(tmp,grade);
}
返回错误,表示在…等中没有匹配operator=。我知道他们看到'='时不知道该怎么做,所以我需要定义它。我该怎么做呢?同样,重点是制作一个简单的Subject对象列表。(我不能用矢量,这是学校用的)
-
operator=
不应该返回void:Subject& operator=(const Subject &obj){ grade = obj.grade; strcpy(name, obj.name); return *this; }
-
Subject *collection = new Subject[3];
创建一个包含3个Subjet
对象的数组。然而,操作符new
返回一个指向在堆上创建的新对象的指针,因此:collection[i] = new Subject(tmp,grade); ___________/ ____________________/ ^ ^-----a pointer to a Subject object |--object of Subject type
你试图将一个指针赋值给一个对象,这是行不通的。要使
operator=
工作,你应该写collection[i] = Subject(tmp,grade);
-
如果
obj.name
大于name
,strcpy(name, obj.name);
行将导致未定义行为。在复制字符串之前,您应该相应地更改name
的大小。 -
读一读所谓的"三原则"是个好主意。基本上,如果您的类定义了析构函数、复制构造函数或复制赋值操作符,则可能应该定义所有这些操作符。
相关文章:
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 查找奇数平方和时遇到麻烦
- 将双倍转换为 LPARAM 的麻烦
- 麻烦得到提升::记录器编译
- 翻转 ppm 图像C++麻烦
- 尝试使用 indexOf 创建一个 if 语句来检查字符串是否包含字符.有一点麻烦
- 搬家turtlebot_gazebo麻烦
- CSUF EPP - 你有什么想法(在添加到链接列表末尾时遇到麻烦)
- 我的期末考试遇到了麻烦.代码不断循环回到我的订购菜单,不会显示我的总价
- 作为一个C++新手,我遇到了麻烦
- 我需要帮助创建一个评分系统,但它一直给我一个错误,注释掉的整数是给我带来麻烦的部分
- 为什么map有操作符[],set没有
- 找麻木的麻烦
- MySQL 从注入过渡到参数化时遇到麻烦
- 字符串和双精度的麻烦,等值后再得到一个数字
- C++击球平均值程序使用输入/输出文件打印名称,平均值,最高/最低平均值时遇到麻烦
- 自定义QVariant麻烦
- 串和阵列的麻烦
- 试图创建对象列表,操作符=给了我麻烦
- 在定义模板类、操作符和迭代器时遇到麻烦