I have this error, when I try to use a pointer to member function to a different class.
Error : sources/common/OurMenu.cpp: In member function ‘void OurMenu::menuNavigation()’: sources/common/OurMenu.cpp:336:36: error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘((OurMenu*)this)->OurMenu::_buttons.std::vector::at >(((std::vector::size_type)((OurMenu*)this)->OurMenu::_actualLine))->Button::doIt (...)’, e.g. ‘(... ->* ((OurMenu*)this)->OurMenu::_buttons.std::vector::at >(((std::vector::size_type)((OurMenu*)this)->OurMenu::_actualLine))->Button::doIt) (...)’ _buttons.at(_actualLine)->doIt();
That's my code:
OurMenu.hh
class OurMenu
{
private:
GraphicLib *_window;
OurGame *_game;
gdl::Geometry _background;
std::vector<gdl::Texture*> _textures;
std::vector<Button*> _buttons;
int _actualLine;
int _time;
public:
[...]
void menuNavigation();
void gameSetting();
};
Button.hh
class Button
{
private:
Bloc *_select;
Bloc *_notSelect;
public:
Button(const float &x, const float &y, gdl::Geometry *back,
gdl::Texture *tx, gdl::Texture *txS, glm::vec3 const &scale, void (OurMenu::*ptr)());
~Button();
void (OurMenu::*doIt)();
void isSelect();
void isDeselect();
Bloc *getSelect() const;
Bloc *getNotSelect() const;
};
Button Declaration
Button *solo = new Button(2, 7, &_background, _textures.at(1), _textures.at(7),
glm::vec3(0.0025, 0.0022, 0), &OurMenu::gameSetting);
Function call
solo->doIt();
Button.cpp
Button::Button(const float &x, const float &y, gdl::Geometry *back,
gdl::Texture *tx, gdl::Texture *txS, glm::vec3 const &scale, void (OurMenu::*ptr)())
{
_select = new Bloc(0, 0, back, txS);
_select->rotate(glm::vec3(1, 1, 0), 180);
_select->setScale(scale);
_select->setX(x);
_select->setY(y);
_select->setZ(1);
_notSelect = new Bloc(0, 0, back, tx);
_notSelect->rotate(glm::vec3(1, 1, 0), 180);
_notSelect->setScale(scale);
_notSelect->setX(x);
_notSelect->setY(y);
_notSelect->setZ(-1);
doIt = ptr;
}