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!
이유는 간단하다 : 당신이 클래스를 전방 선언 할 때
포함 MovieYearComparator 헤더 파일 포함 시도 – Mine
해당 클래스의 헤더 파일이 없습니다. 구현 세부 사항은'ActorGraph.cpp'에 있는데,'MovieYearComparator'가 친구로 선언 된 곳에'ActorGraph.hpp'가 포함되어 있습니다. – jeanluc
ActorGraph 클래스를 통해 "class MovieYearComparator"를 시도하십시오. – Thomas