2017-10-14 4 views
-1

다음 코드는 모든 활성 유닛에 대한 포인터를 포함하는 벡터 인 벡터에서 가장 약한 타겟을 찾는 데 사용됩니다. 각 유닛을 통과하여 can_attack (유닛 & u, 유닛 &v)이라는 다른 함수에 전달하는 이터레이터를 만들려고합니다.이 유닛은 공격을하기에 충분히 근접해 있으면 두 유닛과 대책을 취합니다.이터레이터를 함수에 넣기

컴파일시 다음 오류가 발생합니다. "오류 유형 : 'const Unit'유형이 'Unit * const'유형의 lvalue에 바인드 할 수 없습니다. 나는 틀린 타입의 변수를 전달하고 있지만 iterator를 const 유닛으로 바꾸는 방법을 모르겠다. 어떤 도움 주셔서 감사합니다

void World::enemies_within_attack_range(const Unit &u, 
            vector<Unit*> &targets) const 
{ 
    targets.clear(); 
    vector<Unit*>::const_iterator it=units.begin(); 
    for(it;it!=units.end();it++){ 
    if((*it)->team != u.team){ 
     if(can_attack(u,(*it))){ 
      targets.push_back(*it); 
     } 
    } 
    } 

} 
+0

'can_attack (u, * (* it))'을 원할 수도 있습니다. – songyuanyao

+0

그런 간단한 해결책. 고맙습니다. 하나의 다른 빠른 질문 .. 내 for 루프는 표현식 결과가 사용되지 않는다는 오류를 생성합니다. 왜 그렇게 될까요? for 루프에서 사용되지 않은 표현식 결과입니까? – spaceinvaders101

+1

* 표현식 결과 * 란 무엇입니까? 당신이 보여준 코드에 어떤 부분이 있습니까? – songyuanyao

답변

0

문제는 can_attack 전화와 매개 변수 const 단위 & u에 있습니다. songyuanyao 언급 한대로 전화를 수정해야합니다 : can_attack (u, * (* it)). 그러나 이것이 유일한 문제는 아닙니다. ,

  1. 대신 const를 단위 & U를 단위 & U로 U를 선언; 이 세 가지 옵션이 있습니다
  2. 단위 (단위, 단위 &v)로 가능하면 can_attack (const 단위 & u, 단위 &v)로 선언하십시오.
  3. (이것은 아마도 최악의 옵션입니다.) can_attack (const_cast < Unit &> (u), * (* it)) 호출을 사용하십시오.

귀하의 선택은 귀하의 것입니다.