2013-03-12 75 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