c++ - 如何修复二元运算符
问题描述
错误 C2676 二进制“[”:“collection::item”未定义此运算符或转换为预定义运算符可接受的类型
我读了几篇文章和 Microsoft VS 网站,但不明白如何解决这个问题
template<typename T1, typename T2>
class collection {
private:
class item {
public:
T1 item; T2 key;
};
unsigned int top;
item array = new item[top];
public:
collection& operator[](unsigned int i) {
return array[i];
}
collection(int top) {
this->top = top;
}
void coutarr() {
for (int i = 0; array[i] != 0; i++) {
cout << array[i].item << endl;
}
}
void extendarray() {
item x = new item[top*2];
for (int i = 0; i < top; i++) {
x[i] = array[i];
}
delete []array;
swap(array, x);
top = top*2;
}
void addvar(int i, T1 item, T2 key) {
array[i].item = item; array[i].key = key; //Here 2 Errors
}
};
如果有人能解释我该怎么做,我将不胜感激。谢谢。
解决方案
错误 C2676 二进制“[”:“collection::item”未定义此运算符或转换为预定义运算符可接受的类型
这是因为
item array = new item[top];
一定是
item * array = new item[top];
但是当top有值时,您还必须在构造函数中移动初始化
最好是构造函数collection(int top)
获得一个无符号值collection(unsigned top)
或更好collection(size_t top)
当属性是指针时,复制构造函数,operator = ...丢失
如何检查i in的有效性collection& operator[](unsigned int i)
并void addvar(int i, T1 item, T2 key)
在它无效时产生异常?addvar也是一个奇怪的名字,因为它是一个集合,一个add意味着大小增加。您无法访问 const 实例上的元素,请添加const collection& operator[](unsigned int i) const
如果void extendarray()
初始大小为 0,则将大小加倍不会做很多;-)
推荐阅读
- css - 如何在 Vue.js 中使用 CSS 对齐表头和内容?
- json - 邮递员,失眠不发送正文 json
- go - 现在支付一次,也可以选择(!)创建订阅——如何在 Stripe 中做到这一点?
- javascript - 如何使用网页获取 windows 系统版本?
- java - Harmony OS 中的 setWindowAnimations(Android) 有什么替代方案吗?
- python - discord.py :: massban 命令在完成后未正确禁止和发送嵌入消息
- flutter - 满足条件时如何在屏幕上显示锁定屏幕?
- java - Android Studio CheckBox 问题
- c# - 实体框架在同一张表中查询 WHERE 中的步骤顺序
- javascript - 如何交换字符串 JavaScript 中的字符位置