не правильно задаю указатель на функцию в c++

169
20 декабря 2021, 04:40

Создаю приложение.

static void g_startup ( GApplication *app, gpointer data ) {
}
int main ( int argc, char **argv ) {
    init_opts ();
    // parser_config_init ( );
    // signal ( SIGINT, sig_handle );
    daemon ( 1, 1 );
    Gapp app( prog );
    global_app = app.get_app ( );
    app.set_callback ( g_startup );
    gint ret = app.run ( );
    return ret;
}

Указываю g_startup как указатель в app.set_callback. Вот как выглядит Gapp:

class Gapp {
public:
    Gapp( const char *prog ) {
        app = g_application_new ( prog, G_APPLICATION_FLAGS_NONE  );
        g_application_register ( app, NULL, NULL );
    }
    GApplication *get_app ( ) {
        return app;
    }
    void set_callback ( void (*startup) ( Gapplication *gapp, gpointer data ) ) {
        g_signal_connect ( app, "activate", G_CALLBACK ( startup ), NULL );
    }
    gint run() {
        return g_application_run ( app, 0, 0 );
    }
private:
    GApplication *app;
};      

Выводит ошибку такую.

In file included from main.cpp:18:0:
app.h:14:39: error: expected ‘,’ or ‘...’ before ‘(’ token
   void set_callback ( void (*startup) ( Gapplication *gapp, gpointer data ) ) {
                                       ^
main.cpp: In function ‘int main(int, char**)’:
main.cpp:63:31: error: invalid conversion from ‘void (*)(GApplication*, gpointer) {aka void (*)(_GApplication*, void*)}’ to ‘void*’ [-fpermissive]
  app.set_callback ( g_startup );
                               ^
In file included from main.cpp:18:0:
app.h:14:8: note:   initializing argument 1 of ‘void Gapp::set_callback(void*)’
   void set_callback ( void (*startup) ( Gapplication *gapp, gpointer data ) ) {
        ^~~~~~~~~~~~
makefile:3: recipe for target 'all' failed
make: *** [all] Error 1
READ ALSO
C++: перевод простой дроби в десятичную

C++: перевод простой дроби в десятичную

Подскажите пожалуйста с алгоритмом:

126
Почему код успешно компилируется?

Почему код успешно компилируется?

Я создал три класса, в каждом по приватному атрибуту, и с помощью дружественной функции использовал их значенияНо функция дружественна лишь...

72
Открыть файл с++

Открыть файл с++

Как открыть файл с именем, заданым в отдельной строке без указания полного пути, только для чтения? В какой директории файл должен находиться?

112