Здравствуйте! Столкнулся с такой проблемой. Eсть класс который обрабатывает нажатия на экран и в случае попадания нажатия в зону области вызывает функцию которую заранее получает по указателю:
Код | namespace Controllers{
typedef void(*controller_CALLBACK)(Controllers::TapController * controller, float x, float y);
typedef struct TapController_{ controller_CALLBACK callback; void setCallback(controller_CALLBACK func); void update(float x, float y){ if(Точка в зоне)callback(this,x,y); } }TapController;
|
Гдето в другом модуле:
Код | namespace NativeKeyboard{
typedef struct Keyboard_{ void keyDown(Controllers::TapController * controller, float x, float y){ бла бла бла } void initialize(){ TapController * ctrl = new TapController; ctrl->setCallback(keyDown); <----------------------------------А тут ошибка } }
|
И вот тут возникает ошибка: reference to non-static member function must be called. При навелдении мыши на подчеркивание пишет что : значение типа "void (NativeKeyboard::Keyboard::*)(Controllers::TapController controller, float x, floay y)" нельзя присвоить сущности типа "Controllers::controller_CALLBACK"
Вообщем пока писал вопрос, дошло и решение. Это происходит потому что передается не конкретная функция а описание функции в классе. Может кто сформулирует правильно, незнаю как обьяснить:) Нужно просто делать так:
Код | void initialize(){ TapController * ctrl = new TapController; ctrl->setCallback(this->keyDown); }
|
Ан нет, это только подчеркивание ушло, а ошибка при компиляции все равно возникает. Так что может все таки есть решение этой проблемы? |