2016-11-10 9 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); 
} 
関連する問題