2016-06-03 2 views
2

첫 번째 오류 생성하는 매개 변수 movies주의 날 관련 코드를 응축하자에 대한 친구 비교기 클래스 : 우리가 구현 파일에서이 범위에서 선언되지 않음 - priority_queue C++

// ActorGraph.hpp 
class ActorGraph 
{ 
protected: 
    class Movie; // definition further below 
    friend class MovieYearComparator; 

    int func(..., priority_queue<Movie, vector<Movie>, MovieYearComparator> &movies); 

    class Movie {...}; 
}; 

을 :

// ActorGraph.cpp 
class MovieYearComparator 
{ 
public: 
    bool operator() (const ActorGraph::Movie a, const ActorGraph::Movie b) const 
    { 
     // comparison operation 
    } 
}; 

ActorGraph::func(..., priority_queue<Movie, vector<Movie>, MovieYearComparator> &movies) 
{...} 

그러나 g ++은 선언을 참조하여이 범위에서이 선언되지 않은 MovieYearComparator이라고 불평합니다. 필자는 모든 것을 정확히 철자했으며이 패러다임은 우선 순위 큐가 아닌 파일의 다른 컨테이너에서 작동합니다. Movie은 매우 작은 클래스이므로 값으로 전달하기로했습니다.

struct A; 

struct B { 
    A *_a; // Ok 
    B (A &a) : _a(&a) { } // Ok 
}; 

void f (A a) { } // Oops! 

이유는 간단하다 : 당신이 클래스를 전방 선언 할 때

+0

포함 MovieYearComparator 헤더 파일 포함 시도 – Mine

+0

해당 클래스의 헤더 파일이 없습니다. 구현 세부 사항은'ActorGraph.cpp'에 있는데,'MovieYearComparator'가 친구로 선언 된 곳에'ActorGraph.hpp'가 포함되어 있습니다. – jeanluc

+0

ActorGraph 클래스를 통해 "class MovieYearComparator"를 시도하십시오. – Thomas

답변

관련 문제