“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: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误

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

MFC不同对话框使用公共数据的几种方法

有时候要在不同Dialog中传递数据,上一篇用到了消息机制。后来又查了一下,发现还有其他的方法总结一下: 1,全局变量 习惯将全局变量在StdAfx.cpp中定义,然后在StdAfx.h中用ext...
  • BlueCY
  • BlueCY
  • 2017年04月13日 17:23
  • 570

Opencv+VS+MFC 播放视频(cv 2.3+版本)

配置环境,可以参考:VS2013配置OpenCv3.0

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

定义成全局或者静态成员函数 #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include ...
  • zwcwu31
  • zwcwu31
  • 2014年01月20日 19:39
  • 878

warning C4150: 删除指向不完整“XXX”类型的指针;没有调用析构函数

warning C4150:

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

 ======================================================= 转自http://www.tc5u.com/mfc/1927534.htm ...

可变参数列表的函数调用 va_list va_start va_arg va_end

当无法列出函数所有形参的类型和数目时,可用省略号指定参数表,例如:            void foo(...);            void foo(parm_list,...); 下...

编译时出现fatal error C1853: "debug/xxx.pch" is not a precomplied header file with......错误的原因及解决办法(转)

错误原因: 该错误是因为当项目中混合了 .cpp 和 .c 文件时,编译器会对它们采取不同的编译方式(主要是因为对函数声明的处理方式不同),因而不能共用一个预编译头文件。 在 VC++ 中,默认的...

java语言基础(33)——面向对象(父类中没有无参构造编译报错——无法将类 xxx中的构造器 xxx应用到给定类型 实际参数列表和形式参数列表长度不同)

注意:以下代码是错的。 class Father { public Father(String name){ System.out.println("Father带参构造"); } } cl...

C/C++(6)va_list、va_start、va_arg、va_end实现可变参数列表函数

经典的可变参数表printf函数的实现原理:在C/C++中,对函数参数的扫描是从后向前的。 函数参数是通过压入堆栈的方式来给函数传参数的,最先压入的参数最后出来,而栈是从内存的高地址向低地址存放的,...
  • qjpxAAA
  • qjpxAAA
  • 2016年10月24日 17:40
  • 326
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:“error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误
举报原因:
原因补充:

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