이 같은 코드를 작성하려면 : A
객체는 클래스 호출 B
형 멤버 b
의 멤버 함수를 DoSomething
, 그리고 클래스 B
의 DoSomeOtherThing
멤버 함수는,이 호출 A
의 Notify
멤버 함수를. 아래 코드를 참조하십시오.
클래스 A :
class A
{
B b;
public:
A() : b(*this)
{
}
void DoSomething()
{
b.DoSomething();
}
void Notify()
{
}
};
클래스 B :
class B
{
A &a;
public:
B(A &a) : a(a)
{
}
void DoSomething()
{
}
void DoSomeOtherThing()
{
a.Notify();
}
};
문제는 함수를 인라인으로 유지하고 싶기 때문에 코드가 헤더 파일에 있어야한다는 것입니다. 상호 포함을 유발할 수 있기 때문에 단순히 서로를 포함시킬 수 없으며,이 상황에서 앞으로 선언을 사용할 수 있는지도 모르겠습니다. 소스 파일에 구현을 작성할 수 있지만 인라인 함수는 아닙니다. 그렇다면 코드를 어떻게 작동시킬 수 있습니까?
멤버 함수의 정의를 클래스 정의 외부로 이동하고 클래스 외부 정의에를 명시 적으로 접두사로 지정하여 인라인 (따라서 헤더에)을 유지할 수 있습니다 inline
. 당신이 그것을 한 후에, 당신은 알게 될 것입니다
B
의 멤버 함수 정의 앞에 쉽게 이동할 수 있으며 해당 멤버에서 A
액세스하는 문제를 해결합니다.B
A
의 포워드 선언 만 필요 B
하므로 문제 class B;
를 A
수정하는 정의 앞에 추가 하십시오 .이 두 가지 변경을 수행하면 문제를 해결할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다