2016-11-10 99 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); 
}