无法转换为类型的函数指针

时间:2015-04-18 12:12:14

标签: c++ function-pointers member-function-pointers

我基本上是在尝试为我创建的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;

2 个答案:

答案 0 :(得分:2)

如消息所示,您正在尝试将成员函数的地址分配给常规函数指针,而不是成员函数指针。

取静态或非成员函数的地址;或将类型更改为成员函数指针

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

在后一种情况下,您需要一个对象来调用它,例如

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

答案 1 :(得分:0)

CanMove a = &FuncPtrTest::FuncExample;

您无法从非静态成员函数初始化它:

    static bool FuncExample(position old_pos, position new_pos);
 // ^^^^^^