Ошибка при назначении оконных функций .load и .unload

Я работаю над многооконным приложением, и во втором окне я вызываю эту функцию init().

static struct MessageUI {
    Window *window;
    MenuLayer *menu_layer;
} ui;

...
...
...

void messages_init(void) {
    ui.window = window_create();

    window_set_window_handlers(ui.window, (WindowHandlers) {
        .load = window_load,
        .unload = window_unload
    });
}

Когда я запускаю код, я получаю эту ошибку, относящуюся к операторам присваивания .load и .unload.

../src/messages.c: In function 'messages_init':
../src/messages.c:63:3: error: initialization from incompatible pointer type [-Werror]
../src/messages.c:63:3: error: (near initialization for 'handlers.load') [-Werror]
../src/messages.c:65:2: error: initialization from incompatible pointer type [-Werror]
../src/messages.c:65:2: error: (near initialization for 'handlers.unload') [-Werror]

Любая идея, почему эта ошибка возникает?

Заранее спасибо!

ИЗМЕНИТЬ

Вот мои функции window_load и window_unload

static void window_load(void) {
    // Create it - 12 is approx height of the top bar
    ui.menu_layer = menu_layer_create(GRect(0,0,144,168-16));
    menu_layer_set_click_config_onto_window(ui.menu_layer,ui.window);

    MenuLayerCallbacks callbacks = { 
        .draw_row = (MenuLayerDrawRowCallback) draw_row_callback,
        .get_num_rows = (MenuLayerGetNumberOfRowsInSectionsCallback) num_rows_callback,
        .select_click = (MenuLayerSelectCallback) select_click_callback
    };
    menu_layer_set_callbacks(ui.menu_layer, NULL, callbacks);

    //Add to window
    layer_add_child(window_get_root_layer(ui.window), menu_layer_get_layer(ui.menu_layer));
}

static void window_unload(void) {
    APP_LOG(APP_LOG_LEVEL_DEBUG, "unloading message UI");
}

person Dylan    schedule 10.06.2014    source источник
comment
Как определяются window_load и window_unload?   -  person Ismail Badawi    schedule 11.06.2014
comment
Я добавил свои функции window_load и window_unload выше.   -  person Dylan    schedule 11.06.2014


Ответы (1)


Эта ошибка возникает из-за того, что window_load и window_unload предназначены для приема указателя на Window. Вы должны объявить их следующим образом:

static void window_load(Window *window) {
    // ...
}

static void window_unload(Window *window) {
    // ...
}
person Ismail Badawi    schedule 11.06.2014
comment
Спасибо! Тоже такая ошибка новичка! - person Dylan; 11.06.2014