Как инициализировать указатель статической функции с нестатической функцией класса при инициализации класса? - PullRequest
1 голос
/ 02 мая 2011

Определение (Core.h):

static int (*foolink)(int*, char*, key*, key*);

Также переопределено в Core.cpp. Этот код вызывает ошибку:

foolink = this->step;

ошибка:

Engine/Core.cpp:31: error: argument of type 'int (Core::)(int*, char*, key*, key*)' does not match 'int (*)(int*, char*, key*, key*)'

Использование указателя:

(*foolink)(NULL, NULL, NULL, NULL);

Что не так? Пожалуйста, помогите мне!

Ответы [ 2 ]

3 голосов
/ 02 мая 2011

В программах на C ++ большинство функций являются функциями-членами ; то есть они являются частью класса. Вам не разрешается использовать обычный указатель на функцию для указания на функцию-члена ; вместо этого вы должны использовать указатель на функцию-член .

В вашем случае вы можете определить его как

     v you have to name the class here
int (YourClass::*foolink)(int*, char*, key*, key*);
foolink = &YourClass::step;

// This is how you can call the function via member function pointer
YourClass object, *pObject = &object;
// One way is to envoke the function from object
(object.*foolink)(...);
// The other way is from pointer to object
(pObject->*foolink)(...);

C ++ FAQ :

Указатели на функции-члены

1 голос
/ 02 мая 2011

Тип this->step должен быть функцией, возвращающей целое число и принимающей int *, char *, key * и key * в качестве аргументов. Это явно не так. И помните, что присвоение методов класса нормальным функциям не будет работать; оба они должны быть методами или обеими обычными функциями, но не смесью, что, как я подозреваю, вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...