2014-10-17 123 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

這是正確的。指針也是如此。

但是有了指針,當你說一個指針等於另一個時,你只是讓它們指向內存中的同一個點?

也正確。指定一個指針可以做到這一點。就像分配一個整數一樣,左邊的整數與賦值運算符右邊的值相同。在這兩種情況下,左側都不能是暫時的。

這不是我回來的地址,我返回一個指針。

指針的值的內存地址。返回地址或返回指針沒有區別。