c++ 函数指针参数的问题

我在编程的时候遇到一个问题,纠结中。在类中,有一个成员函数,其参数有一个是指针类型<>,其定义如下classA{...pulic:typedefstruct{....}M... 我在编程的时候遇到一个问题, 纠结中。
在类中, 有一个成员函数,其参数有一个是指针类型<>, 其定义如下
class A {
...
pulic:
typedef struct {....}MsgType ; //结构体定义
MsgType MsgRsvBuffer; //本结构体内部的定义消息
void SendMessage( u8 len); //
void Transfer( //此函数 结构体内部调用也可由外部调用。
void(*sdmsg)(u8) , //第一个参数是指针类型
MsgType *msg, //
u8 len);
};
A a;
在类的外部, 假如这样调用 :
a.Transfer( A::SendMessage , &a.MsgRsvBuffer , 8) ;
会提示 函数指针类型不匹配, 原因是 一个是类内部,一个是全局函数指针类型,

解决方式: 将SendMessage 声明为 static方式,
可是 SendMessage函数里面用到了MsgRsvBuffer ,也必须声明为static的, 这样
上面的外部调用就不成立了,会提示MsgRsvBuffer 未定义。

如果 我将 SendMessage 定义为 voidSendMessage ( MsgType *msg, u8 len );
则, 在外部调用中,如何 指定SendMessage 里面的 msg 指针呢?

或者有其他更好的方式吗?
展开
 我来答
百度网友2948cde
2013-04-12 · 超过12用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:33万
展开全部
解决方法很多,其实需要看你到底想要封装什么:
void Transfer( //此函数 结构体内部调用也可由外部调用。
void(*sdmsg)(u8) , //第一个参数是指针类型
MsgType *msg, //
u8 len);
这个接口的参数为函数指针,是为了更好的扩展函数对么?
如果是为了扩展,可以将SendMessage方法变成一个函数,在参数中指定MsgRsvBuffer;
另外,如果使用C++,直接将SendMessage定义为接口或者虚函数,使用继承的方法重写该函数也是可行的,这样正好对应了模板方法的设计模式。
追问
现在 我就是 用虚函数方式, 不过出现了一个怪问题:如下:
class MODBUS
{
/
protected:
...
public:/*****供外部调用*****/
...
};
class MODBUS_485: MODBUS
{
};
确提示 MODBUS 没有定义, 两个是在同一个文件中,而且MODBUS在前面啊,奇怪!
能帮忙分析一下吗,谢谢
海贼514
2013-04-12 · TA获得超过105个赞
知道答主
回答量:89
采纳率:0%
帮助的人:38.5万
展开全部
看的不太懂,不知道行不行,你可以尝试着把void(*sdmsg)(u8)定义成友元函数,这样里外都可以用了
不行就算了额,呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式