我尝试重载+ =但是它给我一个错误:
表达式必须具有整数或未整合的枚举类型
class Sensor{};
class SensorList{
Sensor ** sensors;
};
void main(){
Sensor s1;
SensorList *list = new SensorList();
list += &s1;
}
这是+ =运算符
的重载SensorList* operator+=(Sensor * sens){
SensorList * lista= new SensorList();
Sensor ** temp = new Sensor*[this->noElem];
for (int i = 0; i < this->noElem; i++)
temp[i] = this->senzori[i];
delete[] this->senzori;
this->senzori = new Sensor*[this->noElem + 1];
for (int i = 0; i < this->noElem; i++)
this->senzori[i] = temp[i];
this->senzori[this->noElem] = sens;
this->noElem += 1;
lista = this;
return lista;
}
我该怎么办?我必须重载新运算符吗?
答案 0 :(得分:1)
然而,实际上定义了用户定义的operator+=
,这两个操作数都是
list += &s1;
是指针。因此,这永远不会调用用户定义的运算符,因为所有操作数都不是class
或enum
类型。由于语言规则,你不能为两个指针重载任何运算符。
相反,它会尝试向指针添加内容,而这只适用于积分和枚举,正如编译器告诉你的那样。
特别是,您的问题与operator new
无关,而您显然甚至没有尝试重载此问题。
所以该做什么:停止通过指针执行所有操作,只是重载您的类的操作符或代替类的引用。然后你会得到这样的东西:
Sensor s1;
SensorList sl;
sl += s1;
我建议你阅读this。
如果确实觉得需要使用指针(你可能不应该),请使用像
这样的免费功能void add(SensorList*, Sensor*);