“error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误

转载 2017年01月03日 13:43:59

在一个类中声明一个函数指针,在另一个类中声明一个函数,将该函数地址赋给该指针时出现:“error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误:

[cpp] view plain copy
  1. /*CSeries.h*/  
  2.   
  3. typedef void (CALLBACK* ONSERIESREAD)(void * pOwner, BYTE* buf, DWORD dwBufLen );  
  4.   
  5. class CSeries  
  6. {  
  7. public:  
  8.     CSeries(void);  
  9.     ~CSeries(void);  
  10. public:  
  11.     ONSERIESREAD m_OnSeriesRead;   
  12. };  
另一个类中:
[cpp] view plain copy
  1. /*CSerAssistantDlg.h*/  
  2.   
  3. class CSerAssistantDlg : public CDialog  
  4. {  
  5. private:  
  6.     void CALLBACK OnRecData(void * pOwner, BYTE* buf, DWORD dwBufLen);  
  7. };  
  8.   
  9. //---------------------------使用时如下-------------------------  
  10. CSeries *mySer = new CSeries;  
  11. mySer->m_OnSeriesRead = OnRecData;  
出现如下错误:
[cpp] view plain copy
  1. error C3867: “CSerAssistantDlg::OnRecData”: 函数调用缺少参数列表;请使用“&CSerAssistantDlg::OnRecData”创建指向成员的指针  

错误原因是:静态成员函数的地址可用普通函数指针储存,而普通成员函数地址需要用类成员函数指针来储存,因为普通成员函数要执行时我们必须要确定他是属于哪个类对象才能执行,而类的static函数是不属于这个类的,他是在编译器编译时期就已经确定的,普通成员函数是在有了类对象之后才能执行。而OnRecData是普通成员函数地址
[cpp] view plain copy
  1. 例如:声明一个类:class A{   
  2.             public:       
  3.                     static void func1();  
  4.                 void func2();};  
  5.         则会出现如下:     typedef void (*b)();  
  6.                     b myfunc1 = func1;  //valid  
  7.                     b myfunc2 = func2;      //error  


修改如下即可:

[html] view plain copy
  1. static void CALLBACK OnRecData(void * pOwner, BYTE* buf, DWORD dwBufLen);  

error C3867: “A::fun1”: 函数调用缺少参数列表;请使用“&A::fun1”创建指向成员的指针

是因为你调用的函数没有参数 A a; a.fun1;// 导致错误 a.fun1();//  ok
  • A_sungirl
  • A_sungirl
  • 2012年09月23日 13:45
  • 19612

“error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误

在一个类中声明一个函数指针,在另一个类中声明一个函数,将该函数地址赋给该指针时出现:“error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误: ...
  • qq_28098067
  • qq_28098067
  • 2017年01月03日 13:43
  • 391

libuv的学习与链接库问题:error while loading shared libraries: libuv.so.1

最近学习了一下另一个网络库:libuv,一个文档少,开始令人一头雾水,然后还是很好用的一个库。当然学习该库最重要的原则就是------去看“uv.h”头文件,里面有你想知道的一切。 1. 改了uv_b...
  • lc250123
  • lc250123
  • 2016年09月16日 10:07
  • 882

“error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误

在一个类中声明一个函数指针,在另一个类中声明一个函数,将该函数地址赋给该指针时出现:“error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误: /*...
  • lc250123
  • lc250123
  • 2015年10月13日 13:44
  • 10815

函数调用缺少参数列表;请使用“&Student::Printf”创建指向成员的指针 问题解析

函数调用缺少参数列表;请使用“&Student::Printf”创建指向成员的指针
  • ww020202
  • ww020202
  • 2017年03月11日 12:02
  • 414

函数调用缺少参数列表;请使用“&****Dlg::getThread”创建指向成员的指针”--多线程函数调用

函数调用缺少参数列表;请使用“&****Dlg::getThread”创建指向成员的指针”, 面向对象编程要求线程调用的接口必须是全局函数或静态成员函数。 1.把线程函数改为静态成员函数,...
  • Bettyshasha
  • Bettyshasha
  • 2016年05月31日 11:01
  • 1849

static函数 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针;类的static成员函数

error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误 如下: class CA { public: CA(); void init(FUNC ...
  • qq_17242957
  • qq_17242957
  • 2016年10月07日 23:31
  • 800

error C3867: “Point::getX”: 函数调用缺少参数列表;请使用“&Point::getX”创建指向成员的指针

error C3867: “Point::getX”: 函数调用缺少参数列表;请使用“&Point::getX”创建指向成员的指针 int main() { Circle c(3.5,6....
  • txwtech
  • txwtech
  • 2016年07月17日 16:31
  • 867

使用CreateThread 时报错,函数调用缺少参数列表

 ======================================================= 转自http://www.tc5u.com/mfc/1927534.htm ...
  • liangweibeijing
  • liangweibeijing
  • 2016年06月08日 17:59
  • 787

“Caculate::writehtml”: 函数调用缺少参数列表;请使用“&Caculate::writehtml”创建指向成员的指针

定义成全局或者静态成员函数 #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include ...
  • zwcwu31
  • zwcwu31
  • 2014年01月20日 19:39
  • 924
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:“error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误
举报原因:
原因补充:

(最多只允许输入30个字)