类的成员函数和一般函数(非类的成员函数)

pan2008 2003-08-19 12:21:07
有一函数
她的第三个参数是一个函数指针
该函数指针所指向的函数的类型是VOID
于是
我用某一个类的成员函数的指针作为她的参数
结果说函数的返回类型不匹配

请问:
同样是返回VOID
类的成员函数和一般函数
有何不同
...全文
181 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
GhostAdz 2003-08-19
  • 打赏
  • 举报
回复
学习~~~~
pan2008 2003-08-19
  • 打赏
  • 举报
回复
_thiscall和一般的_stdcall、_cdecl各是何物
如何区别

上面我的问题的出错信息中有_cdecl

steedhorse(晨星) 高人也
所掌握的知识,书上没有

晨星 2003-08-19
  • 打赏
  • 举报
回复
类的非静态成员函数,默认第一个参数都是this指针。所以虽然表面上看,那个成员函数好像完全符合你的你那个参数的函数指针所声明的格式,实际上却比那个形式多一个参数。

这就是_thiscall和一般的_stdcall、_cdecl的区别。

传递函数指针时,最好是指向全局函数的指针,如果你一定要调用类的成员函数,那么也应该通过一个全局函数来间接进行。方法时把this指针传给那个全局函数,然后在全局函数中使用this指针调用你想调用的成员函数。
晨星 2003-08-19
  • 打赏
  • 举报
回复
以下是几中函数调用机制的简单区别(拷贝自MSDN):

Keyword Stack cleanup Parameter passing
__cdecl Caller Pushes parameters on the stack, in reverse order (right to left)
__stdcall Callee Pushes parameters on the stack, in reverse order (right to left)
__fastcall Callee Stored in registers, then pushed on stack
thiscall Callee Pushed on stack; this pointer stored in ECX
(not a keyword)

早期的还有__pascal, __fortran,__syscall等等。
如果你暂时不能完全理解他们(其实我的不太清楚,:P),也不要紧,只需要知道这几种调用方式是不一样的,从而导致一种机制的函数名无法赋值给另一种机制的函数指针就可以了。

不是“书上没有”,而是一般的讲C++语言的书上没有,因为这需要一些编译原理的知识。如果一本讲C++语言的书企图讲解计算机科学的方方面面,那没有1万页恐怕是不够的。

64,281

社区成员

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

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