首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数指针不是函数或函数指针。

函数指针不是函数或函数指针。
EN

Stack Overflow用户
提问于 2015-06-17 08:38:43
回答 2查看 4.4K关注 0票数 5

我有以下问题:

代码语言:javascript
复制
void MyClass::LoopFunction(vector<Item>& items,void (MyClass::*funcy)(vector<Item>&,int))
{
    for(SInt32 i = 0; i < 50; i++)
    {
        funcy(items,i);
    }

}

上面写着:

代码语言:javascript
复制
Called object type 'void(MyClass::*)(vector<Item>&,int)' is not a function or function pointer

有人能帮我找到解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-17 08:40:56

funcy是指向成员函数的指针,因此需要对类的实例调用它,如下所示:

代码语言:javascript
复制
(this->*funcy)(items,i);
票数 8
EN

Stack Overflow用户

发布于 2015-06-17 08:46:29

非静态成员函数的问题是,它们有一个不可见的第一个参数,编译器将在成员函数中转换为this。这意味着,如果没有对象实例来调用成员函数,就不能调用(非静态)成员函数。

在您的情况下,如果您想使用this对象调用LoopFunction,您需要这样做。

代码语言:javascript
复制
(this->*funcy)(items, i);

如果要在另一个对象实例上调用它,则需要将该对象传递给该函数,并使用该对象。

或者您可以使用例如std::functionstd::bind来代替成员函数指针。或者使用类似于标准库处理回调的模板参数,并允许您将任何可调用的对象传递给函数(但是,如果您想使用非静态成员函数,仍然必须使用std::bind )。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30886420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档