我正在使用一个将“指向函数的指针”作为变量的函数,但是程序失败并出现以下错误:
EventCreatorBase.h:215:52:错误:ISO C ++禁止获取非限定或带括号的非静态成员函数的地址,以形成指向成员函数的指针。说'& EventCreatorBase :: generateExceptionEvent'
class ExceptionEvent {
public:
void cellEvent::generateEvents(const unsigned long* event, void(*overflowCallbackFn)(unsigned int));
};
class EventCreatorBase{
public:
void generateExceptionEvent(unsigned int);
..
void fun1()
{
...
ExceptionEvent event1;
const unsigned long* eventCounter;
..
event1.generateEvents(eventCounter, &generateExceptionEvent); //EventCreatorBase.h 215
}
};
答案 0 :(得分:0)
你不能将成员函数指针转换为函数指针,顺便说一句,你的代码是错误的。 应该像
event1.generateEvents(eventCounter, &EventCreatorBase::generateExceptionEvent);
但它也不起作用,因为你不能将成员函数指针转换为函数指针。将std::function
与std::bind
一起使用的最佳方式。
void cellEvent::generateEvents(const unsigned long* event,
const std::function<void(int)>&);
然后只是
event1.generateEvents(eventCounter,
std::bind(&EventCreatorBase::generateExceptionEvent, this, std::placeholders::_1));
如果你不能使用C ++ 11 - 你可以使用boost :: function / boost :: bind。
答案 1 :(得分:0)
这里有2个问题: 一个。函数指针参数的语法错误 - 您说它是一个常规函数指针,但您希望它是一个类成员指针。你需要使用类名(这意味着你需要前向声明的类) 湾编译器正在准确说明第二个错误需要修复的内容。