2014-10-17 126 views
0

在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; 
}; 

在这行“在这里!”,读红色MSVC++ 2012中带下划线的错误是与不是一个有效的左值的左值。

我明白如何重载赋值运算符。我明白,当你返回一个int时,把它分配给它必须作为参考被返回,因为你不能说2 = 3 + 5.我明白了。但是用指针,当你说一个指针与另一个指针相等时,你只是让它们指向内存中的同一个点?这不像我回来的地址,我正在返回一个指针。

+2

一个指针就像一个特殊的'int'持有一个地址。所以'int'适用于指针。 – juanchopanza 2014-10-17 08:02:10

+1

如果你改变'item * getfront(){//'到'item *&getfront(){//' – 2014-10-17 08:04:51

+0

所以两个存取函数实际返回地址吗? – thelittlegumnut 2014-10-17 08:05:23

回答

0

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

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

1

这是否意味着什么?

int foo() 
{ return 10; } 

foo() = 20; 

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

0

明白,当你返回一个int,将其分配到的东西它必须返回作为参考,因为你不能说2 = 3 + 5

这是正确的。指针也是如此。

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

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

这不是我回来的地址,我返回一个指针。

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