您的位置:程序门 -> vc/mfc -> 基础类



这个问题应该是关于c++比较深层的东西,请高手帮忙...


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


这个问题应该是关于c++比较深层的东西,请高手帮忙...
发表于:2007-08-09 20:00:34 楼主
问题是这样的(请不要问我做这个有什么用!就是有用!):
我新建了一个mfc工程test,它是基于对话框的,
因此会有ctestdlg与ctestapp这两个类,我的问题是:
在ctestdlg::hello()函数中我想调用ctestdlg::welcome(),当然大家会说直接调用就行,但我的问题是,必须要通过ctestapp类间接调用.我的做法是
ctestapp   dlg(                     );//先声明一个对象,括号里是我要提的问题!
//我将ctestdlg::welcome的指针传了过去,然后在ctestapp里面调用welcome函数;
但却报了以下错误:
cfffapp::cfffapp(lpvoid,void   (__cdecl   *)(void))”:   不能将参数   2   从“void   (__thiscall   cfffdlg::*   )(void)”转换为“void   (__cdecl   *)(void)
说明:我已经考虑到类中函数名做参数和一般函数做参数的不同.但还是出现上面那个不能解决的问题!
所以请高手一定要帮我,我没什么分数,请见谅...

感激不尽...
发表于:2007-08-09 20:09:361楼 得分:0
__thiscall   __cdecl   这两个类型是不一样的
就像类的回调函数一样   使用静态的函数  

静态函数   就会取消掉__thiscall(this指针的传递)
自己在加__stdcall   或   __cdecl   申明,   注意一致
发表于:2007-08-09 22:39:022楼 得分:0
加上static
发表于:2007-08-10 00:08:193楼 得分:0
谢谢你们,呵呵我现在知道是回调函数的问题了,但加了static后就没有办法访问原来类里面的东西了,这回调函数就变得没有意义了啊!
发表于:2007-08-10 00:15:274楼 得分:0
楼主这样实现,类封装还有何意义,成员函数互相调用,还要经过第三方?!
又长见识了。
发表于:2007-08-10 08:16:455楼 得分:0
刚学的人   就是有些奇怪的想法   ,   多吃点苦头   就知道   怎么会事了。
任何事情都还是   要讲点规矩地。
发表于:2007-08-10 11:14:046楼 得分:0
访问原来类里面的东西   可以用一个全局的类指针

其实大家都这样混乱过,都是这么过来的
发表于:2007-08-10 16:23:587楼 得分:0
首先只传递ctestdlg::welcome()的指针给cfffapp是不够的,这只拿到了类方法ctestdlg::welcome()的入口地址,而c++中通过类方法指针进行调用时,需要用
      (pobject-> *pmemberfunc)   (args);
的方式进行调用,也就是要有类方法所属对象的地址,编译器会把对象地址通过寄存器传递到类方法中,这就是类方法中潜在的this,这样类方法内部才能正确访问类成员变量

然后再把参数定义为同格式的类方法指针
typedef   void   (cfffdlg::*pfunc)(void);
cfffapp::cfffapp(cfffdlg*   obj,   pfunc   func);

cfffapp   app(dlg,   &ctestdlg::welcome);

调用
    obj-> *func();

发表于:2007-08-10 16:52:128楼 得分:0
为什么不用消息的方式处理呢。
来回导消息比来回弄函数得劲多了。
发表于:2007-08-10 18:24:149楼 得分:0
我的个天。。。。。


快速检索

最新资讯
热门点击