加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 函数指针 – 模糊符号错误

发布时间:2020-12-16 09:36:24 所属栏目:百科 来源:网络整理
导读:MyClass是一个单例类(在我的整个程序中只会有其中一个). 我想做的是如下. 使用AddData向我的类添加数据,返回一个函数指针,然后我可以传递给dll中的“另一个”函数. 然后这个’其他’函数调用我的回调函数 我的课就是这样. typedef void (*DataReceivedCallba
MyClass是一个单例类(在我的整个程序中只会有其中一个).

我想做的是如下.

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

我的课就是这样.

typedef void (*DataReceivedCallback)(int,int);  

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,int);

应该,

typedef void (MyClass::*DataReceivedCallback)(int,int);

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

callback = &MyClass::MyCallBackFunction;

Demo.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读