ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function
When you move the setPRUCallback function into your class you change the prototype (well, C++ changes the prototype) from:

void setPRYCallback( const std_msgs::Empty&amp; toggle_msg) {}


to:

void setPRYCallback( ROSController *this, const std_msgs::Empty&amp; toggle_msg) {}


That is now not what the callback registering function expects, and so it breaks.

By making the method static it removes that *this parameter, but also means that the function can only access static data within your class (variables also marked static) and there is only one copy of the function (and static variables) shared between all instances of the class (maybe not what you want).