无法使用this指针在对象上使用重载[]运算符

时间:2014-05-20 13:29:30

标签: c++ operator-overloading this

我遇到了重载+运算符和重载[]运算符的问题。在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;
    }
}

2 个答案:

答案 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:因此几乎肯定会访问你不拥有的内存。