2013-03-12 4 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; 
} 

이 나는 ​​종류의 문제를 이해하지만, 매우 정확한 문법 얻을은`t

vector<Actor*> stack; 

변수 스택을 정의하는 방법이다.
사실 나는 여기에있는 물건들과 비교해도 되겠습니까? 이 두 포인터가 같은 위치를 가리키고 있는지 실제로 테스트하는 것 같습니다.

+2

'actor'은 (는) 포인터가 아니므로 참고 자료입니다. – Tushar

+0

나는 이것에 대해 자신을 미워 할 것이다. if (& actor == this-> stack [x]) – WhozCraig

+0

@JamesAndino No. 배열이나 포인터 * to * 참조를 가질 수 없다. – WhozCraig

답변

1

actor은 개체이며 참조로 전달됩니다. 이 아니고 포인터입니다. 따라서 수행해야 할 것은 actor의 주소를 포인터와 비교하는 것입니다. 우리는 단항 & 연산자를 사용하여이 작업을 수행 :

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

operator==의 충분한 과부하를하지 않는 한 유효 실제 actor 객체에 == 사용. 그렇지 않으면 이전에 언급 한 오류가 발생합니다.

+0

'actor'는 실제로는 객체가 아니며 다른 객체에 대한 참조입니다. 별칭과 같습니다. – Tushar