我基本上是在尝试将函数指针分配给我创建的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;
最佳答案
如消息所示,您正在尝试将成员函数的地址分配给常规函数指针,而不是成员函数指针。
使用静态或非成员函数的地址;或将类型更改为成员函数指针
typedef bool (FuncPtrTest::*CanMove) (position old_pos, position new_pos);
在后一种情况下,您需要一个对象来调用它,例如
(this->*a)(old_pos, new_pos);