私はメニュー項目を取り込むメニューバーを作っています。私は、メニュー項目の挙動を決定するためにメニューバーを保持するウィンドウが必要です。だから私は、ウィンドウがメニュー項目に関数を渡すようにします。クラスのメンバーに関数ポインタを保存する
私の最高の試みは私に、このエラーを得ている:
class MenuItem{
public:
typedef void (sf::RenderWindow::*function_type)();
MenuItem(sf::RenderWindow* win); // window that holds the menu bar
void setBehaviour(function_type f); // I want to be able to change the behaviour
// to reuse the menu item
void action(); // use the function
private:
sf::RenderWindow* m_window;
function_type m_function;
};
MenuItem.cpp
MenuItem::MenuItem(sf::RenderWindow* win) : m_window(win)
{
//ctor
}
void MenuItem::setBehaviour(function_type f)
{
m_function = f;
}
void MenuItem::action()
{
(m_window->*m_function)();
}
メニューバーを追加し、ウィンドウ:ここ
error: no matching function for call to 'MenuItem::setBehaviour(void (MyWindow::*)())'
はMenuItem.hです:
class MyWindow : public sf::RenderWindow
{
//...
void close();
};
とウィンドウのCPPファイル:
MyWindow::MyWindow() : sf::RenderWindow(...)
{
//...
MenuItem item(this);
item.setBehaviour(&MyWindow::close); // error!
//...
}
//...
void MyWindow::close()
{
this->close();
}
さて、あなたはそこにSF :: RenderWindow' 'のメンバーではないですが、派生クラスから来て渡すようにしようと関数ポインタ。 –
ああ...今まであなたのコメントは見ませんでした。ありがとう、それはトリックでした。 – MrMxyztplk