Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 非静态成员函数的非限定或括号,用于形成指向成员函数的指针_C++_Pointers - Fatal编程技术网

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));