Доброго времени суток.
Хочу передать в метод указатель на другой метод. Синтаксическая ошибка(
Подскажите как правильно.
Спасибо
#ifndef BUTTON_H
#define BUTTON_H
#include <string>
#include <StateManager.h>
class Button{
protected:
bool active;
public:
std::string text;
int x, y, w, h;
Button(){};
virtual ~Button(){};
bool isActive(){return active;};
virtual void onClick(){};
virtual void onMouseIn();
virtual void onMouseOut();
};
class StateButton: public Button{
State *onClickState;
public:
StateButton(int, int, int, int, std::string, State*);
~StateButton(){};
void onClick();
};
template<typename T>
class CallerButton: public Button{
T caller;
public:
CallerButton(int, int, int, int,std::string, T);
~CallerButton(){};
void onClick();
};
#endif
#ifndef GAME_STATE_H
#define GAME_STATE_H
#include <State.h>
#include <Button.h>
#include <vector>
#include <EventManager.h>
#include <VideoManager.h>
class GameState: public State{
bool turn;
int **field;
std::vector<Button*> *buttons;
public:
GameState();
~GameState(){};
void onActive();
void onPassive();
void onRender();
void onPhysicTick(){};
void mark(int, int);
};
#endif
Строка ошибки
buttons->push_back(new CallerButton<void (GameState::*)(int, int)>(170 + 50*c1, 170+50*c, 40, 40, "test", GameState::mark(c1, c));
Ошибка
g++ -I include -c src/GameState.cpp -o obj/GameState.o -std=c++11
src/GameState.cpp: In member function ‘virtual void GameState::onActive()’:
src/GameState.cpp:24:132: error: invalid use of void expression
buttons->push_back(new CallerButton<void (GameState::*)(int, int)>(170 + 50*c1, 170+50*c, 40, 40, "test", GameState::mark(c1, c));
Еще раз спасибо.
Пользователь решил продолжить мысль 06 Октября 2015, 00:02:11:
А если вот так
buttons->push_back(new CallerButton<void (GameState::*)(int, int)>(170 + 50*c1, 170+50*c, 40, 40, "test", &GameState::mark));
То
g++ -I include src/main.cpp obj/Application.o obj/BackgroundState.o obj/Button.o obj/EventManager.o obj/GameState.o obj/MenuState.o obj/StateManager.o obj/VideoManager.o -o bin/game.out -lSDL2main -lSDL2 -lSDL2_image
obj/GameState.o: in function «GameState::onActive()»:
GameState.cpp:(.text+0x1e1): undefined reference «CallerButton<void (GameState::*)(int, int)>::CallerButton(int, int, int, int, std::string, void (GameState::*)(int, int))»
collect2: error: ld returned 1 exit status