■
クラスが相互に依存している場合、インライン関数の宣言と定義を分けなければいけない。たとえば、A::invoke_b() のように。
#include <iostream> class A; class B; class A { B* b_; public: A() : b_(0) {} void set_b(B* b) { b_ = b; } int invoke_a() { return 1; } int invoke_b(); }; class B { A* a_; public: B() : a_(0) {} void set_a(A* a) { a_ = a; } int invoke_a() { a_->invoke_a(); } int invoke_b() { return 2; } }; inline int A::invoke_b() { return b_->invoke_b(); } int main(int, char* []) { A a; B b; a.set_b(&b); b.set_a(&a); std::cout << a.invoke_a() << std::endl << a.invoke_b() << std::endl << b.invoke_a() << std::endl << b.invoke_b() << std::endl ; }