我有一个播放器类,看起来像这样(只保留了解决此问题所需的部分):
class Player
{
public:
Player();
~Player();
void kill();
void death();
void reset();
};
kill()
、death()
和 reset()
函数如下所示:
void Player::kill()
{
void (*dPtr)() = &death;
Game::idle(dPtr, 48);
}
void Player::death()
{
reset();
}
void Player::reset()
{
//resets
}
idle函数是Game的一个静态成员函数,它接受一个函数指针和一个整数n,并在n个tick之后调用该函数。以下是函数内容,实现细节不重要:
class Game {
static void idle(void (*)(), int);
};
这段代码给了我一个错误:
ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say '&Player::death' [-fpermissive]
所以我将这一行改为:
void (*dPtr)() = &death;
to
void (Player::*dPtr)() = &Player::death;
为了解决这个问题,我需要修改我的空闲函数调用。但是,由于它需要一个常规函数指针,而我传递的是成员函数指针,因此会导致错误:
no matching function for call to 'Game::idle(void (Player::*&)(), int)'
我的问题是:
如何将成员函数指针 Player::*dPtr
传递给以 void (*)()
作为参数的空闲函数?
或者是否有其他方法可以解决我之前遇到的错误,该错误禁止我从未经修饰的成员函数取地址以形成成员函数指针?
boost::bind
和boost::function
。 - ezaquariistd::bind()
,当前标准中不需要boost。 - πάντα ῥεῖstatic void idle(void (*)(), int);
需要更改。问题出在哪里? - πάντα ῥεῖidle
的界面吗? - MikeMB