CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

函数指针数组调用问题

楼主VAFLS_Scott(飞翔)2004-07-01 11:44:23 在 C/C++ / C++ 语言 提问

函数指针定义:  
  typedef   int   (Srvs_SERV90::*STATUSPROC)(Srvs_SERV90_Cmd   *cmd);  
  在类Srvs_SERV90中定义:  
  class   Srvs_SERV90  
  {  
  ......  
  STATUSPROC   m_statusProcFunc[99];  
  ......  
  int   st_IDLE_process(Srvs_SERV90_Cmd   *cmd);  
  int   st_DCALL_process(Srvs_SERV90_Cmd   *cmd);  
  int   st_CBIND_process(Srvs_SERV90_Cmd   *cmd);  
  ......  
  };  
  给函数指针数组赋值:  
  m_statusProcFunc[0]   =   &   Srvs_SERV90::st_IDLE_process;  
  m_statusProcFunc[1]   =   &   Srvs_SERV90::st_DCALL_process;  
  m_statusProcFunc[2]   =   &   Srvs_SERV90::st_CBIND_process;  
  然后在调用的时候出了问题:  
  住:m_state为一个整数  
  若这样调用:ret   =   (*m_statusProcFunc[m_state])(cmd);  
  编译时报错:invalid   use   of   `unary   *'   on   pointer   to   member  
  若这样调用:ret   =   m_statusProcFunc[m_state](cmd);  
  编译时报错:must   use   .*   or   ->*   to   call   pointer-to-member   function   in   `  
        this->Srvs_SERV90::m_statusProcFunc[(this->Srvs_SERV90::m_state)]  
        (...)'  
   
  用的是g++的编译器  
  请问我到底该怎么调用呢?  
  谢谢! 问题点数:100、回复次数:8Top

1 楼liulin(liulin)回复于 2004-07-01 11:54:50 得分 0

靠!這麽需要效率還用C++,用純C吧!Top

2 楼Agemo(加米欧)回复于 2004-07-01 11:56:43 得分 0

问题不在于你怎么调用的,至于该怎么调用,我相信你能解决  
  问题在于你的m_statusProcFunc数组元素的函数指针类型和实际的函数指针不匹配。  
  m_statusProcFunc[0]的类型是int   ()(Srvs_SERV90_Cmd*)  
  而  
  int   st_IDLE_process(Srvs_SERV90_Cmd   *cmd);  
  int   st_DCALL_process(Srvs_SERV90_Cmd   *cmd);  
  int   st_CBIND_process(Srvs_SERV90_Cmd   *cmd);  
  这3个函数实际上是int   ()(Srvs_SERV90*,   Srvs_SERV90_Cmd   *)的类型。  
  除非把这3个函数声明成静态函数,要么m_statusProcFunc的类型为加上一个函数参数,  
  只要解决这个问题,怎么调用的问题,你自然能解决了。Top

3 楼hcj2002(流浪者·躬自厚而薄责于人 )回复于 2004-07-01 11:57:52 得分 0

m_statusProcFunc[99]是类的成员变量,需要在类的构造函数或别的函数进行复制。  
   
  另外,应声明称public类型的变量才能在类的外部调用。  
  赋值时:  
   
  object.m_statusProcFunc[0]   =   &   Srvs_SERV90::st_IDLE_process;  
  调用时:  
   
  objict.m_statusProcFunc[m_state](...)Top

4 楼oo(为了名副其实,努力学习oo技术ing)回复于 2004-07-01 13:53:21 得分 0

this->*m_statusProcFunc[m_state](cmd);  
  Top

5 楼oo(为了名副其实,努力学习oo技术ing)回复于 2004-07-01 14:08:55 得分 100

sorry,少了括号  
  (this->*m_statusProcFunc[m_state])(cmd);Top

6 楼oo(为了名副其实,努力学习oo技术ing)回复于 2004-07-01 14:15:32 得分 0

说明一下:  
  你定义的是类成员函数指针,所以调用的时候必须跟一个object关联,  
  如:(object.*XXX)(...);或  
            (pointer->*XXX)(...);Top

7 楼VAFLS_Scott(飞翔)回复于 2004-07-01 14:47:27 得分 0

强烈感谢oo老兄!Top

8 楼geesun(还是Geesun!)回复于 2004-07-01 15:06:47 得分 0

如Agemo(加米欧)所说,函数没有完全匹配。如果是成员函数,调用就不是很对了!Top

相关问题

  • 数组、指针及函数调用!?
  • 请问如何写函数指针结构数组的调用代码?
  • javascript如何调用Asp函数、数组
  • 函数指针数组一问
  • 函数指针数组的问题
  • CTypedPtrArray指针数组的调用问题...
  • “指向函数指针数组的指针”怎么使用?
  • 指针和函数调用的问题
  • 函数指针的声明与调用
  • 请问:如何用指针数组和函数指针做函数列表?

关键词

  • 函数
  • 指针
  • 解决
  • statusprocfunc
  • 调用
  • srvs
  • serv90
  • 数组
  • cmd
  • cbind

得分解答快速导航

  • 帖主:VAFLS_Scott
  • oo

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo