2016-11-10 12 views
-1
class A; 
class B; 

class A 
{ 
public: 
    A(B * b) : b(b) 
    { 
     b->foo(this); 
    } 
private: 
    B * b; 
}; 

class B 
{ 
public: 
    void foo(A *) 
    {} 
}; 

사용하여 클래스를 만들려면 나에게이 코드를 컴파일 서로

incomplete-type.hpp: In constructor ‘A::A(B*)’: 
incomplete-type.hpp:9:4: error: invalid use of incomplete type ‘class B’ 
    b->foo(this); 
    ^~ 

을 제공하지만 난 정말 포인터를 통해 서로를 사용하는 클래스가 필요합니다. 어떻게해야합니까?

+2

클래스 정의 외부와 두 클래스가 모두 정의 된 후 생성자를 정의하십시오. – wally

답변

3

두 유형이 모두 완료된 다른 유형을 실제로 사용하는 함수 정의를 아래로 이동하십시오.

class A; 
class B; 

class A 
{ 
public: 
    A(B * b); 
private: 
    B * b; 
}; 

class B 
{ 
public: 
    void foo(A *) 
    {} 
}; 

inline A::A(B * b) : b(b) 
{ 
    b->foo(this); 
}