C++ 非静态成员函数的非限定或括号,用于形成指向成员函数的指针
我使用的函数将“函数指针”作为变量,但程序失败,出现以下错误:C++ 非静态成员函数的非限定或括号,用于形成指向成员函数的指针,c++,pointers,C++,Pointers,我使用的函数将“函数指针”作为变量,但程序失败,出现以下错误: EngCurraseBase:H:215:52:错误:ISO C++禁止接受不合格或括号化的非静态成员函数的地址,以形成指向成员函数的指针。说“&EventCreatorBase::generateExceptionEvent” 类例外事件{ public: void cellEvent::generateEvents(const unsigned long* event, void(*overflowCallbac
<强> EngCurraseBase:H:215:52:错误:ISO C++禁止接受不合格或括号化的非静态成员函数的地址,以形成指向成员函数的指针。说“&EventCreatorBase::generateExceptionEvent”
类例外事件{ 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
}
};
您不能将成员函数指针转换为函数指针,顺便说一下,您的代码是错误的。 应该是
event1.generateEvents(eventCounter, &EventCreatorBase::generateExceptionEvent);
但它也不起作用,因为您无法将成员函数指针转换为函数指针。最好将std::function
与std::bind
一起使用
void cellEvent::generateEvents(const unsigned long* event,
const std::function<void(int)>&);
如果不能使用C++11,可以使用boost::function/boost::bind。这里有两个问题:
a、 函数指针参数的语法错误-您说它是常规函数指针,但希望它是类成员指针。您需要使用类名(这意味着,您需要声明类的前向)
编译器正确地告诉你第二个错误需要修复什么。你是否考虑了编译器告诉你的精确操作?
event1.generateEvents(eventCounter,
std::bind(&EventCreatorBase::generateExceptionEvent, this, std::placeholders::_1));