
Hi Andreas, The following is a rough guide to the layout of the code that currently builds under Linux (reactions are not shown). I hope it shows enough details to answer your questions: M.h: struct A1; struct A2; struct A3; struct B0; struct C0; struct M: sc::state_machine< M, A1 > { void start (); ... }; struct A1 : sc::simple_state< A1, M > { A1(); ~A1(); }; A1 : sc::simple_state< A1, M > { A1(); ~A1(); }; struct A2 : sc::simple_state< A2, M > { A2(); ~A2(); }; A2 : sc::simple_state< A2, M > { A2(); ~A2(); }; struct A3 : sc::simple_state< A3, M, mpl::list<B0, C0> > { A3(); ~A3(); }; A3 : sc::simple_state< A3, M, mpl::list<B0, C0> > { A3(); ~A3(); }; B.h: #include "M.h" struct B1; struct B2; struct B3; struct D1; struct B0 : sc::state< B0, A3::orthogonal< 0 >, B1> { B0(my_context ctx); ~B0(); }; B0 : sc::state< B0, A3::orthogonal< 0 >, B1> { B0(my_context ctx); ~B0(); }; struct B1 : sc::state< B1, B0> B1 : sc::state< B1, B0> { B1(my_context ctx); ~B1(); }; struct B2 : sc::state< B2, B0, D1> B2 : sc::state< B2, B0, D1> { B2(my_context ctx); ~B2(); }; struct B3 : sc::state< B3, B0> B3 : sc::state< B3, B0> { B3(my_context ctx); ~B3(); }; C.h: #include "M.h" struct C1; struct C2; struct C0 : sc::state< C0, A3::orthogonal< 1 >, C1> { C0(my_context ctx); ~C0(); }; C0 : sc::state< C0, A3::orthogonal< 1 >, C1> { C0(my_context ctx); ~C0(); }; struct C1 : sc::state< C1, C0> C1 : sc::state< C1, C0> { C1(my_context ctx); ~C1(); }; struct C2 : sc::state< C2, C0> C2 : sc::state< C2, C0> { C2(my_context ctx); ~C2(); }; D.h: #include "B.h" struct D2; struct D1 : sc::state< D1, B2> D1 : sc::state< D1, B2> { D1(my_context ctx); ~D1(); }; struct D2 : sc::state< D2, B2> D2 : sc::state< D2, B2> { D2(my_context ctx); ~D2(); }; M.cpp: #include "M.h" #include "B.h" #include "C.h" void M::start () { initiate (); } <any other M class related stuff> A.cpp #include "M.h" #include "B.h" #include "C.h" <all A class related stuff> B.cpp #include "B.h" #include "D.h" <all B class related stuff> C.cpp #include "C.h" <all C class related stuff> D.cpp #include "D.h" <all D class related stuff> main.cpp: #include "M.h" int main () { M m; m.start (); return 0; } thirdparty.cpp: #include "M.h" M *m = 0; Under Windows the following errors are produced: thirdparty.cpp, main.cpp, C.cpp: c:\PXI Code Base\CommonPlatform\include\boost\statechart\simple_state.hpp(893) : error C2027: use of undefined type 'B0' A.cpp, M.cpp: c:\PXI Code Base\CommonPlatform\include\boost\statechart\simple_state.hpp(893) : error C2027: use of undefined type 'D1' B.cpp: c:\PXI Code Base\CommonPlatform\include\boost\statechart\simple_state.hpp(893) : error C2027: use of undefined type 'C0' Simon