Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Problem ze wskaźnikami na funkcje składowe obiektu

Ostatnio zmodyfikowano 2016-05-16 00:40
Autor Wiadomość
marc_xxx
Temat założony przez niniejszego użytkownika
[SFML] Problem ze wskaźnikami na funkcje składowe obiektu
» 2016-05-15 23:09:30
Cześć.
Piszę klasę przycisk. Klasa ma otrzymać jako argument swoją nazwę (to co jest napisane na przycisku) oraz akcję, która jest wykonywana po naciśnięciu. Stworzyłem klasę ButtonActions, w której są publiczne funkcje statyczne. Klasa Button (oraz jej dziecko - MainMenuButton) mają przyjąć po 2 argumenty typów std::string oraz Action - wcześniej zdefiniowany typ jako:
typedef void( ButtonActions::* Action )( void );
. Mój problem polega na tym, że nie wiem jak wysłać (przypisać) owy wskaźnik na funkcję w obiekcie. Wiem, że nazwa funkcji to jest jej adres ale instrukcja ButtonActions:CloseGame nie działa (podczas tworzenia klasy MainMenuButton). Zerknijcie na mój kod - wstawiam okrojony kod, mam nadzieję, że nic ważnego nie pominę :P :
Button
C/C++
class Button
    : public VInteractiveObject
{
public:
    typedef void( ButtonActions::* Action )( void );
   
    Button( std::string ButtonTittle, Action action );
protected:
    Action action;
};

Button::Button( std::string ButtonTittle, Action action )
{
    this->action = action;
   
}
MainMenu
C/C++
class MainMenu
{
public:
    MainMenu();
    ~MainMenu();
   
private:
    class MainMenuButton
: public Button
    {
    public:
        MainMenuButton( std::string buttonTittle, Action action );
    private:
        static float nextButtonPosition;
       
    };
    std::vector < MainMenu::MainMenuButton > Buttons;
};
MainMenu::MainMenu()
{
    this->gameHeader.setTexture( ResourceManager::GetInstance().GetMenuHeader() );
    this->Buttons.push_back( MainMenuButton( "Listen to Music", ButtonActions::Nothing ) ); //BŁĄD (no instance of constructor....)
    this->Buttons.push_back( MainMenu::MainMenuButton( "Exit", & ButtonActions::CloseGame ) ); //I TO TEŻ NIE DZIAŁA (no instance of constructor....)
}
MainMenu::MainMenuButton::MainMenuButton( std::string buttonTittle, Action action )
    : Button( buttonTittle, action )
{
    this->SetPosition( 512.0f,( 384.0f + this->nextButtonPosition ) );
    this->nextButtonPosition += this->buttonShape.getSize().y + 15.0f;
}
ButtonAction
C/C++
class ButtonActions
{
public:
    static void CloseGame();
    static void Nothing();
   
private:
    ButtonActions();
    ~ButtonActions();
   
};
void ButtonActions::CloseGame()
{
    Game::GameState = Game::EGameState::Exiting;
}

void ButtonActions::Nothing()
{
   
}
P-148275
pekfos
» 2016-05-15 23:42:41
Jaki błąd?
P-148277
marc_xxx
Temat założony przez niniejszego użytkownika
» 2016-05-15 23:53:58
no instance of constructor "MainMenu::MainMenuButton::MainMenuButton" matches the argument list symulator_informatyka arguments are: (const char [X], void (*)()
Problem jest z definicją wskaźnika albo podczas wysyłania, ale nie mam pojęcia jak to zrobić - nigdy nie używałem wskaźników na funkcje, a tym bardziej na funkcje składowe.
 
P-148278
pekfos
» 2016-05-15 23:57:22
C/C++
static void CloseGame();
static void Nothing();
Wywal static.
P-148279
marc_xxx
Temat założony przez niniejszego użytkownika
» 2016-05-16 00:05:30
Dzięki, teraz działa, ale nie rozumiem dlaczego - przecież nie istnieje, żaden egzemplarz klasy to i funkcje też mają przypisanego miejsca w pamięci. A jak teraz wywołać tą funkcję? :P
P-148281
pekfos
» 2016-05-16 00:08:21
nie rozumiem dlaczego - przecież nie istnieje, żaden egzemplarz klasy to i funkcje też mają przypisanego miejsca w pamięci.
Nie znam tego języka, przetłumacz na polski.

A jak teraz wywołać tą funkcję? :P
Wynalazłeś przed chwilą wskaźniki na funkcje od nowa? W innym wypadku nie widzę możliwości, byś wiedział jak wyglądają, nie wiedząc nawet gdzie znaleźć informacje, jak ich dalej użyć.
P-148282
marc_xxx
Temat założony przez niniejszego użytkownika
» 2016-05-16 00:11:32
nie rozumiem dlaczego - przecież nie istnieje, żaden egzemplarz klasy to i funkcje też NIE mają przypisanego miejsca w pamięci :)
P-148283
pekfos
» 2016-05-16 00:16:22
Dalej źle.
przecież nie istnieje żaden egzemplarz klasy, to i funkcje też nie mają przypisanego miejsca w pamięci.
Jak to funkcja może nie mieć przypisanego miejsca w pamięci? To co trzymasz w tych wskaźnikach? Obietnice wyborcze..?
P-148284
« 1 » 2
  Strona 1 z 2 Następna strona