C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 函数指针 – 模糊符号错误大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
MyClass是一个单例类(在我的整个程序中只会有其中一个).

我想做的是如下.

>使用AddData向我的类添加数据,返回一个函数指针,然后我可以传递给dll中的“另一个函数.
>然后这个’其他’函数调用我的回调函数

我的课就是这样.

typedef void (*DataReceivedCallBACk)(int,@R_197_10185@;  

class MyClass
{
    MyClass();
    ~MyClass();

    void AddData(int sourcEID,DataReceivedCallBACk &callBACk);
    static void MyCallBACkFunction(int var1,int var2);
};

void MyClass::AddData(int sourcEID,DataReceivedCallBACk &callBACk)
{
    callBACk = &MyCallBACkFunction;

}
void MyClass::MyCallBACkFunction(int var1,int var2 )
{
    //do something blah blah
}

然后我可以这样做:

int main()
{
     DataReceivedCallBACk callBACk;
     MyClass->GeTinstance()->AddData(1,callBACk);
     callBACk(1,100);
}

当我单步执行此操作时,我看到我确实踏入了回调MyCallBACkFunction,这就是我想要的:)

我现在想要做的是将main中定义的’callBACk’传递给一个将回调到我的回调函数的dll函数.

我有dll的代码所以我想修改一个如果它的函数,以便它接受我的回调函数参数.

我在dll函数签名中这样做:

void * someDllFunction( int var1,int var2,DataReceivedCallBACk& callBACk)
{
   callBACk(2,200);
}

但我得到错误
错误C2872:’DataReceivedCallBACk’:模糊符号

我怎么解决这个问题?
这是否与仅允许跨dll边界使用c样式参数有关?

解决方法

typedef void (*DataReceivedCallBACk)(int,@R_197_10185@;

应该,

typedef void (MyClass::*DataReceivedCallBACk)(int,@R_197_10185@;

因为,MyCallBACkFunction是MyClass的非静态成员方法.所以它不能有常规的功能签名.
同时更改作业,

callBACk = &MyClass::MyCallBACkFunction;

Demo.

大佬总结

以上是大佬教程为你收集整理的c – 函数指针 – 模糊符号错误全部内容,希望文章能够帮你解决c – 函数指针 – 模糊符号错误所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。