2014-09-16 3 views
0

Я пытаюсь передать функцию void в другую функцию void, безуспешно до сих пор. Поэтому я создал эту функцию внутри класса ExitButton, как это. ExitButton.h:Передача функции void как аргумент другой функции

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 как параметр в другую функцию?

+1

Почему у вас есть '()' после 'setup'? Вы пытаетесь передать функцию, верно? Но '()' используется для * вызова * функции. –

+2

Кажется, вы не хотите называть 'setup' там, но передайте его. Кроме того, функция-член - совершенно другое животное от нормальной функции. – Deduplicator

+0

@DavidSchWartz, даже если я делаю это без out(), он бросает мне ту же ошибку – mauricioSanchez

ответ

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 
} 
+0

должна быть такая функция настройки для параметра app.cpp? – mauricioSanchez

+0

нет, проблема заключается в 'void setup (void (* _setup));', это принимает параметр, который является указателем на void, а не указателем на функцию void – vsoftco

+0

Я пробовал это, но теперь он вызывает мне следующую ошибку : Должна быть вызвана ссылка на нестационарную функцию-член, не хотите ли вы назвать ее без аргументов? И если я добавлю(). Затем он бросает мне ошибку, которую я имел, прежде чем сказать, что void (*)() несовместим с void – mauricioSanchez

Смежные вопросы