函数指针数组调用问题
函数指针定义:
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




