Ich mache eine Menüleiste, die Menüelemente aufnimmt. Ich möchte das Fenster, das die Menüleiste enthält, um zu entscheiden, wie das Verhalten eines Menüelements sein wird. Ich möchte also, dass das Fenster eine Funktion an den Menüpunkt weitergibt.Speichern eines Funktionszeigers in einem Mitglied einer Klasse
ist mein bester Versuch mir diesen Fehler:
error: no matching function for call to 'MenuItem::setBehaviour(void (MyWindow::*)())'
Hier ist MenuItem.h:
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)();
}
Das Fenster, das die Menüleiste hinzufügt :
class MyWindow : public sf::RenderWindow
{
//...
void close();
};
Und das CPP-Datei des Fensters:
MyWindow::MyWindow() : sf::RenderWindow(...)
{
//...
MenuItem item(this);
item.setBehaviour(&MyWindow::close); // error!
//...
}
//...
void MyWindow::close()
{
this->close();
}
Nun, die Funktionszeiger Sie versuchen, es zu passieren ist kein Mitglied von 'sf :: RenderWindow' sondern stammt aus einer abgeleiteten Klasse. –
Ah ... Ich habe Ihren Kommentar bis jetzt nicht gesehen. Danke, das hat den Trick gemacht. – MrMxyztplk