Getting this error in JUCE when trying to abstract away the buttonClicked
handler.
My code looks like this:
Button.cpp/h
class Button : public juce::Button::Listener,
public BaseComponent,
public juce::TextButton
{
public:
Button(
std::string,
double,
double,
BaseHandler *);
void buttonClicked(juce::Button *) override;
};
void Button::buttonClicked(juce::Button *btn)
{
// This is where the error happens
handler->handle(this);
// or handler->handle(btn);
}
And this is how the BaseHandler
and a concrete handler look like:
class BaseHandler
{
public:
BaseHandler();
virtual void handle(juce::Component *) = 0;
};
void PlayHandler::handle(juce::Component *)
{
std::cout << "From operator" << std::endl;
}
The error happens when invoking the handle method in Button::buttonClicked()
. This is how I instantiate a button:
PlayHandler ph;
buttons.push_back(new Button("Play", 80, 40, &ph));
Why would I be getting “JUCE Message Thread (1): EXC_BAD_ACCESS (code=1, address=0x358001a9f48094)” here? I did this exact same thing but with lambdas instead of the BaseHandler implementation, and it was working fine.