急!!将C代码转换为C++代码时出错

beihaojia 2008-03-05 05:31:34
函数:unsigned long CMyCreateVix::SampleGenerateVixBufferDoneCB(PVIXGEN_HANDLE handle, PVIXGEN_CTX context, U32 VixBytesGenerated)

typedef struct _vixGenContext
{
...
unsigned long (*VixBufferReadyCallbackRoutine)(); // Callback routine
...

} VIXGEN_CTX, *PVIXGEN_CTX;

PVIXGEN_CTX context;

context->VixBufferReadyCallbackRoutine = SampleGenerateVixBufferDoneCB;
//在执行上面语句时出现下面错误信息
//但是在C代码中无错误,请教各位大侠究竟是什么原因,谢谢!!
error C2440: '=' : cannot convert from 'unsigned long (__thiscall CMyCreateVix::*)(unsigned long *,struct _vixGenContext *,unsigned long)' to 'unsigned long (__cdecl *)(v
oid)'
...全文
236 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
beihaojia 2008-03-06
  • 打赏
  • 举报
回复
已经搞定,谢谢大家!!
beihaojia 2008-03-05
  • 打赏
  • 举报
回复
谢谢各位大侠这么晚还在给我解释问题,我一会调试一下,明早给大家回复,加分:)
koral 2008-03-05
  • 打赏
  • 举报
回复


//在CMyCreateVix的定义中:
class CMyCreateVix{
...
public:
static unsigned long CMyCreateVix::SampleGenerateVixBufferDoneCB(PVIXGEN_HANDLE handle, PVIXGEN_CTX context, U32 VixBytesGenerated); //注意是静态的函数

...
};

unsigned long CMyCreateVix::SampleGenerateVixBufferDoneCB(PVIXGEN_HANDLE handle, PVIXGEN_CTX context, U32 VixBytesGenerated){}

typedef struct _vixGenContext
{
...
unsigned long (*VixBufferReadyCallbackRoutine)(); // Callback routine
...

} VIXGEN_CTX, *PVIXGEN_CTX;

PVIXGEN_CTX context;


但是,如果SampleGenerateVixBufferDoneCB 要访问非静态成员,只能以动态的方式访问;
要修改成如下的版本:


//在CMyCreateVix的定义中:
class CMyCreateVix{
...
public:
static unsigned long CMyCreateVix::SampleGenerateVixBufferDoneCB(CMyCreateVix& thisObject,PVIXGEN_HANDLE handle, PVIXGEN_CTX context, U32 VixBytesGenerated); //注意是静态的函数

...
};

unsigned long CMyCreateVix::SampleGenerateVixBufferDoneCB(CMyCreateVix& thisObject,PVIXGEN_HANDLE handle, PVIXGEN_CTX context, U32 VixBytesGenerated){}

使用的时候,传给他实际的CMyCreateVix对象就行了
iwantfat 2008-03-05
  • 打赏
  • 举报
回复
函数:unsigned long CMyCreateVix::SampleGenerateVixBufferDoneCB(PVIXGEN_HANDLE handle, PVIXGEN_CTX context, U32 VixBytesGenerated)

typedef struct _vixGenContext
{

unsigned long (*VixBufferReadyCallbackRoutine)(PVIXGEN_HANDLE handle, PVIXGEN_CTX context, U32VixBytesGenerated);

} VIXGEN_CTX, *PVIXGEN_CTX;

PVIXGEN_CTX context;

context-> VixBufferReadyCallbackRoutine = SampleGenerateVixBufferDoneCB;


这样试一下看看, 应该没有问题;
beihaojia 2008-03-05
  • 打赏
  • 举报
回复
6楼这位大哥的方法也不行啊,用了以后错误更多了,谢谢:(
beihaojia 2008-03-05
  • 打赏
  • 举报
回复
加static肯定是不行,刚试过,再试试其他方法,谢谢大家了!!
Treazy 2008-03-05
  • 打赏
  • 举报
回复
需要注意的并不是这个东西编译通过了就没问题了

关键是不同的编译器处理的方式是不同的,所以在设计的时候如果使用了成员函数指针,那你就要考虑考虑移植性的问题了

实现功能固然重要,但是代码量,效率,其他很多问题都是需要考虑的!

希望文章对你有帮助!
baihacker 2008-03-05
  • 打赏
  • 举报
回复
改一下五楼
typedef struct _vixGenContext
{
...
unsigned long (*VixBufferReadyCallbackRoutine)(); // Callback routine
...

} VIXGEN_CTX, *PVIXGEN_CTX;

改成

typedef struct _vixGenContext
{
...
unsigned long (CMyCreateVix::*VixBufferReadyCallbackRoutine)(PVIXGEN_HANDLE, PVIXGEN_CTX, U32); // Callback routine
...

} VIXGEN_CTX, *PVIXGEN_CTX;
函数体不能涉及this,否则会挂掉
baihacker 2008-03-05
  • 打赏
  • 举报
回复
刚才看错了
typedef struct _vixGenContext
{
...
unsigned long (CMyCreateVix::*VixBufferReadyCallbackRoutine)(); // Callback routine
...

} VIXGEN_CTX, *PVIXGEN_CTX;

改成

typedef struct _vixGenContext
{
...
unsigned long (*VixBufferReadyCallbackRoutine)(PVIXGEN_HANDLE, PVIXGEN_CTX, U32); // Callback routine
...

} VIXGEN_CTX, *PVIXGEN_CTX;
函数体不能涉及this,否则会挂掉
oo 2008-03-05
  • 打赏
  • 举报
回复
unsigned long CMyCreateVix::SampleGenerateVixBufferDoneCB(PVIXGEN_HANDLE handle, PVIXGEN_CTX context, U32 VixBytesGenerated)
这个函数搞成CMyCreateVix类的静态函数
Treazy 2008-03-05
  • 打赏
  • 举报
回复
函数指针从c到c++

发生了很多变化

尤其在指向类成员函数的时候

给你帖篇文章研究一下吧,情况很复杂!

http://www.codeproject.com/KB/cpp/FastDelegate.aspx
oo 2008-03-05
  • 打赏
  • 举报
回复
是编译错不是执行错好不好。


成员函数不是普通函数的说。
baihacker 2008-03-05
  • 打赏
  • 举报
回复
unsigned long (*VixBufferReadyCallbackRoutine)(); // Callback routine
前面加上static

65,187

社区成员

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

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