我在编译以下代码时遇到问题。我通常可以使用回调函数,但似乎在使用成员函数时会出现问题。你知道我声明/定义参数startPlayback有什么问题吗?
class VmapPlayer
{
void startPlayback();
void playAdBreak(int a, void (*callback)());
};
void VmapPlayer::playAdBreak(int a, void (*callback)())
{
cout << a << endl;
//callback();
}
void VmapPlayer::startPlayback()
{
playAdBreak(5, startPlayback); // Compile issue with "startPlayback" parameter
}
最佳答案
void (*callback)() 将callback声明为一个函数指针,但是startPlayback不是一个自由函数,而是一个成员函数。这是修复它的一种方法:
class VmapPlayer
{
void startPlayback();
void playAdBreak(int a, void (VmapPlayer::*callback)());
};
void VmapPlayer::playAdBreak(int a, void (VmapPlayer::*callback)())
{
cout << a << endl;
(this->*callback)();
}
void VmapPlayer::startPlayback()
{
playAdBreak(5, &VmapPlayer::startPlayback);
}
如果您需要更大的灵 active ,并且 C++11 可用,您可以使用 std::function<void()>
保留回调,并用 lambda 表达式填充它,例如 [this](){ startPlayback(); }
关于c++ - 将回调与类成员函数一起使用时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21292040/