将返回的指针分配给另一个返回的指针?

时间:2014-10-17 07:58:37

标签: c++ pointers operator-overloading

在Google上搜索了很长时间。什么都没有出现。

class queue {
public:
    item* getback() {
        return back;
    }
    item* getfront() {
        return front;
    }
    void push(const char* msg);
    const char* pop();
private:
    item* back;
    item* front;
};

class doublequeue {
public:
    doublequeue() {
        read.getback() = send.getfront(); // HERE!!!
    }
private:
    queue read;
    queue send;
};

在" HERE !!!"的行上,在MSVC ++ 2012中,读取带有红色下划线。错误与左值不是有效的左值有关。

我理解如何重载赋值运算符。我知道当你返回一个int时,要把它分配给某个东西它必须作为参考返回,因为你不能说2 = 3 + 5.我明白了。但是有了指针,当你说指针等于另一个指针时,你只是让它们指向内存中的同一个位置吗?这不像我回复地址,我正在返回一个指针。

3 个答案:

答案 0 :(得分:1)

这是什么意思吗?

int foo()
{ return 10; }

foo() = 20;

返回类型不是L值,因此无法分配。将int*视为int,您就会明白无法将某些内容分配给R值。

答案 1 :(得分:0)

从getback()返回的指针是与成员返回的单独对象。 getback()函数返回成员的副本,副本没有标识。这是一个临时的,不是左值。分配给它并没有多大意义,因此错误信息。即使你确实分配了它,它也不会改变你的后面成员。

要分配给该成员,您可以返回对该成员的引用并为其分配。或者您可以返回指向您的成员的指针并分配给解除引用的指针的结果。或者您可以使用setter函数。或者你可以回头公开,因为这基本上就是你想要的,而且是最简单的方法。

答案 2 :(得分:0)

  

明白当你返回一个int时,要把它分配给某个东西,它必须作为参考返回,因为你不能说2 = 3 + 5。

那是对的。指针也是如此。

  

但是有了指针,当你说指针等于另一个时,你只是让它们指向内存中的同一个位置吗?

也正确。分配指针就可以了。就像分配一个整数一样,左手整数的赋值与赋值运算符右边的值相同。在这两种情况下,左侧不能是临时的。

  

这不像我回复地址,我正在返回一个指针。

指针的值是内存地址。返回地址或返回指针没有区别。