2016-11-10 27 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); 
} 
Смежные вопросы