Важно помнить, что Vala на самом деле компилируется в C, который затем подается в GCC для создания исполняемого файла, а предупреждение вашего компилятора на самом деле составляется из gcc
not valac
На моей машинесообщение форматируется немного по-разному
warning: assignment to ‘void * (*)(GListModel *, guint)’ {aka ‘void * (*)(struct _GListModel *, unsigned int)’} from incompatible pointer type ‘GObject * (*)(GListModel *, guint)’ {aka ‘struct _GObject * (*)(struct _GListModel *, unsigned int)’}
Что можно упростить до
assignment to ‘void * (*)(GListModel *, guint)’ from incompatible type ‘GObject * (*)(GListModel *, guint)’
Что в основном говорит о том, что GLib ожидает, что get_item вернет void *
вместоGObject, это ошибка в привязках, поэтому ее можно игнорировать
Запуск сопровождается предупреждениями времени выполнения
(list:4511): GLib-GIO-CRITICAL **: 21:44:24.003: g_application_set_application_id: assertion 'application_id == NULL || g_application_id_is_valid (application_id)' failed
(list:4511): Gtk-CRITICAL **: 21:44:24.008: gtk_list_box_bind_model: assertion 'model == NULL || create_widget_func != NULL' failed
Итак, у вас есть 2 проблемы
- Вашневерный идентификатор приложения.Взгляните на HowDoI / ChooseApplicationID , чтобы помочь решить, что использовать вместо «TestApp», как правило, что-то вроде
com.githost.me.App
- На самом деле вы не установили метод для связывания модели споэтому Gtk отклоняет его, убедитесь, что вы действительно передали ему функцию
Однако ни один из них не говорит нам, почему вы получаете SEGV
Ответ заключается в том, что ваша GListModel содержит элементы типаint
, тогда как GtkListBox ожидает коллекцию Object