I get the following compile warnings … looking at bond.h it does declare BondSM as a struct at the bottom and a friend class also, but then BondSM_sm.h now calls it a class. This all seems odd. Shouldn't the declaration in bond.h be a class? // Internal use only struct BondSM << change to class?? { BondSM(bond::Bond *b_) : b(b_) {} void Connected(); void SisterDied(); void Death(); void Heartbeat(); void StartDying(); private: bond::Bond *b; }; ----------------------------------- Error snippet: Scanning dependencies of target rospack_genmsg_libexe [ 0%] Built target rospack_genmsg_libexe Scanning dependencies of target rosbuild_precompile [ 0%] Built target rosbuild_precompile Scanning dependencies of target bondcpp [ 33%] Building CXX object CMakeFiles/bondcpp.dir/src/timeout.o [ 66%] Building CXX object CMakeFiles/bondcpp.dir/src/bond.o In file included from /Users/kevin/ros_sandbox/stacks/bond_core/bondcpp/src/bond.cpp:32: /Users/kevin/ros_sandbox/stacks/bond_core/bondcpp/include/bondcpp/bond.h:186:1: warning: 'BondSM' defined as a struct here but previously declared as a class [-Wmismatched-tags] struct BondSM ^ /Users/kevin/ros_sandbox/stacks/bond_core/bondcpp/include/BondSM_sm.h:25:1: note: did you mean struct here? class BondSM; ^~~~~ struct 1 warning generated. [100%] Building CXX object CMakeFiles/bondcpp.dir/src/BondSM_sm.o In file included from /Users/kevin/ros_sandbox/stacks/bond_core/bondcpp/src/BondSM_sm.cpp:8: /Users/kevin/ros_sandbox/stacks/bond_core/bondcpp/include/bondcpp/bond.h:186:1: warning: 'BondSM' defined as a struct here but previously declared as a class [-Wmismatched-tags] struct BondSM ^ /Users/kevin/ros_sandbox/stacks/bond_core/bondcpp/include/BondSM_sm.h:25:1: note: did you mean struct here? class BondSM; ^~~~~ struct 1 warning generated. Linking CXX shared library ../lib/libbondcpp.dylib clang: warning: argument unused during compilation: '-pthread' [100%] Built target bondcpp