2015-04-18 3 views
0

Я в основном пытаюсь назначить указатель функции экземпляру созданного typedef. У меня есть кое-что, что можно сделать по этому вопросу, но я не могу понять это.Невозможно преобразовать в указатель функции типа

Заголовок:

#ifndef FUNCPTRTEST_H 
#define FUNCPTRTEST_H 

class FuncPtrTest 
{ 
public: 
    struct position { 
     int x; 
     int y; 
    } ; 

    typedef bool (*CanMove) (position old_pos, position new_pos); 
private: 
    FuncPtrTest(); 
    bool FuncExample(position old_pos, position new_pos); 
}; 

#endif // FUNCPTRTEST_H 

Источник:

#include "funcptrtest.h" 

FuncPtrTest::FuncPtrTest() 
{ 
    CanMove a = &FuncPtrTest::FuncExample; 
} 

bool FuncPtrTest::FuncExample(position old_pos, position new_pos) 
{ 
    return true; 
} 

ошибка:

cannot convert 'bool (FuncPtrTest::*)(FuncPtrTest::position, FuncPtrTest::position)' to 'FuncPtrTest::CanMove {aka bool (*)(FuncPtrTest::position, FuncPtrTest::position)}' in initialization 
    CanMove a = &FuncPtrTest::CanMove; 
+0

Вы объявляете простой указатель на функцию и пытается для назначения ему указателя функции-члена. –

+0

Указатель функции, не являющийся членом, не совпадает с указателем функции-члена. Причина в том, что функции-члены нуждаются в скрытом первом аргументе, который становится указателем 'this' внутри функции-члена. Хотя этот скрытый первый аргумент скрыт от вас, он по-прежнему в некотором роде является частью сигнатуры функции-члена. –

ответ

2

Как говорится в сообщении, вы пытаетесь присвоить адрес функции-члена регулярному указателю функции, а не указателю на функцию-член.

Либо возьмите адрес статической или не-членной функции; или изменить тип на член-функции указатель

typedef bool (FuncPtrTest::*CanMove) (position old_pos, position new_pos); 

В последнем случае вам потребуется объект для вызова его, например

(this->*a)(old_pos, new_pos); 
+0

Это исправлено, спасибо. – Bloodcount

0
CanMove a = &FuncPtrTest::FuncExample; 

Вы не можете инициализировать его из не статической функции-члена:

static bool FuncExample(position old_pos, position new_pos); 
// ^^^^^^ 
Смежные вопросы