Я пытаюсь сделать небольшую игру в понг с меню. Итак, я создал класс Button, который хранит функцию, которую я запускаю при нажатии кнопки. Вот как я пытаюсь установить функцию, которая должна вызываться при нажатии кнопки. (setOnClickFunction)
void MenuState::initializeButtons()
{
Button* startButton = new Button({ 200.f, 200.f }, { 100.f, 100.f },
"startButton");
startButton->setOnClickFunction(startButtonOnClick);
}
void MenuState::startGameButtonOnClick()
{
std::cout << "startButton\n";
}
... и вот как выглядит мой класс Button:
class Button : public Drawable, public Transformable
{
protected:
void (*onClick)();
public:
void isClicked(Vector2i mousePos);
void setOnClickFunction(void (*function)());
};
после этого я получаю ошибку:
"error C3867: 'MenuState::startGameButtonOnClick': non-standard syntax; use '&' to create a pointer to member"
/ / РЕДАКТИРОВАТЬ
Это код, который решил мою проблему: // MenuState:
void MenuState::initializeButtons()
{
Button* startButton = new Button({ 200.f, 200.f }, { 100.f, 100.f },
"startButton");
startButton->setOnClickFunction(std::bind(&MenuState::startGameButtonOnClick, this));
}
// Класс кнопки:
class Button : public Drawable, public Transformable
{
protected:
std::function<void()> onClick;
public:
void isClicked(Vector2i mousePos);
void setOnClickFunction(std::function<void()> function);
};