This error "'BS* BS::isr_handler' is a static data member;" is because you are trying to assign it from within your constructor, as the error states, you can only initialise a static member where it is defined.
I usually tackle this ISR issue by creating a singleton (an object which can only have one instance).
There are many ways of doing this (Googling 'singleton C++' will bring up many useful tutorials) but this is my preferred option as you dont need to worry about initialisation happening before the ISR is called and it is the simplest in terms of lines of code
BS.h
class BS {
private:
BS();//private to stop you creating another copy of the singleton by mistake
//The definitions below stop implicit declarations of copy operations
//Attempting to use them will throw a compile error
//stopping you from doing anything silly
BS(BS const&);// Don't Implement
BS operator=(BS const&); // Don't implement
protected:
void RTCisr();
public:
static BS& instance();
static void handle_isr();
};
BS.cpp
BS& BS::instance(){
static BS instance; //this will call your constructor on the first time it is run (once and only once)
return instance; //return a reference (the & sign) your object instance
}
void BS::RTCisr(){
//work your magic
}
void BS::handle_isr(){
BS::instance().RTCisr();// get the singleton instance and call the method.
}
Hope this helps, let us know if you have any problems or if it doesnt compile (sorry I've typed this from memory).
BS::instance() can be called from anywhere to get your instance, and BS::handle_isr() is a static function which can be used in your ISR