2013-12-15 3 views
0

와 부울 연산자를 오버로딩이 같은 클래스가 : 경로의 exit에 마을 매개 변수에서멤버 함수

class AI 
    { 
    private: 
     struct Comparator 
     { 
      bool operator()(const Town* lfs, const Town* rhs) 
      { 
       return GetHeuristicCost(lfs) > GetHeuristicCost(rhs); 
      } 
     }; 
int GetHeuristicCost(const Town* town); 
    // constructor and variables 
    }; 

GetHeuristicCost 반환 발견합니다.

는 내가 뭘하려고 우선 순위 큐에 대한 부울 연산자를 오버로드이지만 나에게 그것은 나에게 오류를 제공하지만 나도 몰라하는 방법입니다 이유

a nonstatic member reference must be relative to a specific object 

내가 알고있는 오류를 제공 struct 내부의 nonstatic 함수를 사용하는 것.

  1. GetHeuristicCost

    는 비 정적해야
  2. 내가
  3. 나는 내가 ()에 대한 두 가지 부울 오버로딩을 사용할 필요가 있기 때문에 구조체로 연산자를 오버로드 할 필요가 아무 소용에 Town 클래스 내부 GetHeuristicCost 이동 시도

  4. 2 개의 다른 환경 그러나 동일한 매개 변수 (2 개의 도시)에. 즉 나는이 할 수 있도록 구조체 필요합니다)

    부울 연산자 ((CONST 타운 * LFS, CONST 타운 * 우) { 반환 GetHeuristicCost (LFS)> GetHeuristicCost (우)

}

기본적으로이 같은 두 개의 구조체를 가진 계획 :

struct Comparator1 
{ 
    bool operator()(const Town* lfs, const Town* rhs) 
    { 
     return GetHeuristicCost(lfs) > GetHeuristicCost(rhs); 
    } 
}; 

struct Comparator2 
{ 
    bool operator()(const Town* lfs, const Town* rhs) 
    { 
     return GetHeuristicCost(lfs) + GetTotalCost (lfs, rhs) > GetHeuristicCost(rhs) + GetTotalCost (lfs, rhs); 
    } 
}; 

답변

3

당신은 그들의 "외부"클래스 인스턴스에 대한 포인터/참조하여 비교기 중첩 된 클래스의 인스턴스를 구축 할 필요가있다.

class AI 
{ 
private: 
    struct Comparator 
    { 
     const AI &outer; 

     Comparator(const AI &o):outer(o){} 

     bool operator()(const Town* lfs, const Town* rhs)const 
     { 
      return outer.GetHeuristicCost(lfs) > outer.GetHeuristicCost(rhs); 
     } 
    }; 

    int GetHeuristicCost(const Town* town)const; 
}; 

// how to use in code: 
AI::Comparator comp(*this); 
priority_queue<Town*, vector<Town*>, AI::Comparator> priorityQueue(comp); 
+0

나는이 '비교기 완 (*이)처럼 내 기능 중 하나를 사용하여 시도,' 'priority_queue <타운 *, 벡터 , 완> PriorityQueue 인,' 그러나 그것은 나에게 오류를 제공 그 컴은 타입 이름이 아님 –

+0

priority_queue , AI :: Comparator> priorityQueue – Mike

+0

나는 그것을 시도했지만 Comparator의 인스턴스를 생성하지 않는다는 사실을 좋아하지 않는다. 그것은 나에게 기본 생성자가 존재하지 않는다는 오류를 준다. 또한 중요한지는 모르겠지만 AI 객체가 계속 변하기 때문에'AI & outer'와'AI & o'에서'const'를 제거했습니다. –