我遇到了重载+运算符和重载[]运算符的问题。在OrderedList右对象上使用时,[]函数工作正常但是当与this指针一起使用时,我无法使它返回正确的值。
代码在main中的工作方式如下: list3 = list1 + list2
其中list2在参数列表中变为'right',我试图使用this指针获取list1的下标值。
我得到的错误是“无法将OrderedList转换为在赋值时加倍”,但我不确定为什么要尝试分配OrderedList?
非常感谢任何帮助,谢谢。
OrderedList OrderedList::operator+(OrderedList &right)
{
int size1 = this -> _size;
int size2 = right.getSize();
double x, y;
y = right[size2];
x = this[size1];
OrderedList list3;
return list3;
}
double OrderedList::operator[](int subscript) const // returns rvalue
{
int x = OrderedList::_size;
if (subscript > x)
{
cout << "Error: number is bigger than the size of the list" << endl;
}
else
{
Node* temporary = OrderedList::getListHead();
for (int counter = 1; counter < subscript; counter++)
{
temporary = temporary -> next;
}
double nodeValue = temporary -> item;
return nodeValue;
}
}
答案 0 :(得分:3)
this
是一个指针,所以为什么你尝试做this[size1]
它正在做指针算术。认为:
int a[] = {0, 1};
int *b[2] = &a;
要从b
获取实际数据,我们必须首先解除它:
int c = (*b)[1];
同样,我们必须取消引用this
:
x = (*this)[size1];
答案 1 :(得分:0)
this->operator[](/*your parameters here*/)
将有效。
您可以删除this->
,但这可能会使事情变得不那么清晰。
(this[size1]
将执行一些讨厌的指针算术 - 相当于this + size1
:因此几乎肯定会访问你不拥有的内存。