2013-03-12 109 views
0

我有這個函數來測試兩個引用是否屬於同一個對象。但我不斷收到錯誤無效的操作數到二進制表達式。比較對象指針

bool Collider::remove(Actor &actor){ 

    for(int x=0; x< this->stack.size(); x++){ 
     if(actor == this->stack[x]){ 
      return true; 
     } 
    } 

    return false; 
} 

我這是怎麼定義變量堆棧

vector<Actor*> stack; 

我有點明白這個問題,但不能老是完全得到語法正確。
其實我是否在這裏比較對象,沒錯?看起來我真的在測試這兩個指針是否指向同一個地方?

+2

'actor'不是一個指針,它是一個參考。 – Tushar 2013-03-12 00:03:22

+0

我會討厭我自己,'如果(&actor == this-> stack [x])' – WhozCraig 2013-03-12 00:04:19

+0

@JamesAndino不,你不能有數組或指針*到*引用。 – WhozCraig 2013-03-12 00:04:42

回答

1

actor是一個對象,它通過引用傳遞;它是不是的指針。所以你必須做的是將actor的地址與指針進行比較。我們通過使用一元&運營商做到這一點:

if (&actor == this->stack[x]) 

實際actor對象上使用==是無效的,除非它有operator==足夠的過載。否則,你會得到你之前陳述的錯誤。

+0

「演員」並不是一個真正的對象,它是對另一個對象的引用。這更像是一個別名。 – Tushar 2013-03-12 20:11:45