【问题标题】:function pointer is not a function or function pointer函数指针不是函数或函数指针
【发布时间】:2015-06-17 08:38:43
【问题描述】:

我有以下问题:

void MyClass::LoopFunction(vector<Item>& items,void (MyClass::*funcy)(vector<Item>&,int))
{
    for(SInt32 i = 0; i < 50; i++)
    {
        funcy(items,i);
    }

}

上面写着:

Called object type 'void(MyClass::*)(vector<Item>&,int)' is not a function or function pointer

谁能帮我找到解决办法?

【问题讨论】:

    标签: c++ function pointers


    【解决方案1】:

    funcy是一个指向成员函数的指针,所以你需要在类的实例上调用它,像这样:

    (this->*funcy)(items,i);
    

    【讨论】:

    • 是的,现在它可以工作了,有一段时间没有使用函数指针了 :) 谢谢!
    【解决方案2】:

    非静态成员函数的问题是它们有一个不可见的第一个参数,编译器将在成员函数内部将其转换为this。这意味着您不能在没有对象实例的情况下调用(非静态)成员函数。

    在您的情况下,如果您想使用 this objectinside LoopFunction 调用它,您需要执行例如

    (this->*funcy)(items, i);
    

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

    或者你可以使用例如std::functionstd::bind 而不是成员函数指针。或者使用类似于标准库处理回调方式的模板参数,它允许您将 any 可调用对象传递给函数(如果您想使用非静态成员函数)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 2018-09-12
      • 1970-01-01
      • 2012-05-28
      相关资源
      最近更新 更多