【问题标题】:Passing a void function as an argument to another function将 void 函数作为参数传递给另一个函数
【发布时间】:2014-09-16 03:20:32
【问题描述】:

我正在尝试将一个 void 函数传递给另一个 void 函数,但到目前为止没有成功。所以我像这样在名为 ExitButton 的类中创建了这个函数。 ExitButton.h:

class ExitButton{

 void setup(void (*_setup));

};

然后我将该类包含到另一个这样的类中。 ofApp.h:

include "ExitButton.h"
class ofApp : public ofBaseApp{

 void update();
 void setup(); 
 StartButton *startButton;

}

所以在我的 ofApp.cpp 中我想像这样调用更新函数:

void ofApp::update(){


exitButton->setup(setup()); // This throws me the following error: Cannot initialize a parameter of type 'void (*)' with an rvalue of type void
    }

所以我假设,我只能传递一个作为指针的 void 函数? 是否真的可以将 void 函数作为参数传递给另一个函数?

【问题讨论】:

  • 为什么setup 后面有一个()?您正在尝试传递该功能,对吗?但() 用于调用一个函数。
  • 似乎你不想在那里打电话给setup,但通过它。此外,成员函数与普通函数是完全不同的动物。
  • @DavidSchWartz 即使我没有使用 (),它也会给我同样的错误
  • @Deduplicator 所以不可能吗?

标签: c++ function void openframeworks


【解决方案1】:

这可能就是你想要的:

#include <iostream>
using namespace std;

class ExitButton{
public:
    void setup(void (*_setup)())
    {    
        _setup(); // we call the function pointer
    };
};    


void setup() // this is a void function
{
    cout << "calling void setup()" << endl;
}

int main()
{
    ExitButton eb;
    eb.setup(setup); // use a void function as a parameter
}

【讨论】:

  • ofApp.cpp的设置函数需要这样吗?
  • 不,问题出在void setup(void (*_setup));,它的参数是一个void指针,而不是一个指向void函数的指针
  • 我试过了,但现在它抛出了以下错误:必须调用对非静态成员函数的引用,你的意思是不带参数调用它吗?如果我添加()。然后它抛出了我之前说 void (*)() 与 void 不兼容的错误
  • 我没有得到你想要做的。 update() 是一个不带参数的函数,但您尝试使用 void 右值调用它。只需发布一个没有任何标题的最小示例,一个简单的 main.cpp 并解释您要实现的目标。
  • 对不起,我打错了。我的意思是 exitButton->setup(setup());在ofApp.cpp的update()中
猜你喜欢
  • 2021-11-19
  • 1970-01-01
  • 2017-08-07
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 1970-01-01
相关资源
最近更新 更多