2015-04-18 212 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); 
// ^^^^^^ 
相关问题