函数指针数组调用问题

VAFLS_Scott 2004-07-01 11:44:23
函数指针定义:
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++的编译器
请问我到底该怎么调用呢?
谢谢!
...全文
250 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcj2002 2004-07-01
  • 打赏
  • 举报
回复
m_statusProcFunc[99]是类的成员变量,需要在类的构造函数或别的函数进行复制。

另外,应声明称public类型的变量才能在类的外部调用。
赋值时:

object.m_statusProcFunc[0] = & Srvs_SERV90::st_IDLE_process;
调用时:

objict.m_statusProcFunc[m_state](...)
Agemo 2004-07-01
  • 打赏
  • 举报
回复
问题不在于你怎么调用的,至于该怎么调用,我相信你能解决
问题在于你的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的类型为加上一个函数参数,
只要解决这个问题,怎么调用的问题,你自然能解决了。
liulin 2004-07-01
  • 打赏
  • 举报
回复
靠!這麽需要效率還用C++,用純C吧!
geesun 2004-07-01
  • 打赏
  • 举报
回复
如Agemo(加米欧)所说,函数没有完全匹配。如果是成员函数,调用就不是很对了!
VAFLS_Scott 2004-07-01
  • 打赏
  • 举报
回复
强烈感谢oo老兄!
oo 2004-07-01
  • 打赏
  • 举报
回复
说明一下:
你定义的是类成员函数指针,所以调用的时候必须跟一个object关联,
如:(object.*XXX)(...);或
(pointer->*XXX)(...);
oo 2004-07-01
  • 打赏
  • 举报
回复
sorry,少了括号
(this->*m_statusProcFunc[m_state])(cmd);
oo 2004-07-01
  • 打赏
  • 举报
回复
this->*m_statusProcFunc[m_state](cmd);

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧