Я пытаюсь «унаследовать» GtkWidget.Я мог унаследовать любой другой виджет, такой как GtkWindow и т. Д., И реализовать его методы в своем собственном файле.Затем я собираюсь загрузить новый виджет с функцией, которая возвращает виджет примерно так: return g_object_new(...
.
Код работает нормально, но я получаю несовместимый тип указателя предупреждение в функции struct init.
class.h
#ifndef CLASS_H_INCLUDED
#define CLASS_H_INCLUDED
#include <gtk/gtk.h>
#define CLASS_NAME_TYPE (class_name_get_type())
G_DECLARE_FINAL_TYPE(ClassName, class_name, CLASS, NAME, GtkWidget)
ClassName *class_name_new();
#endif // CLASS_H_INCLUDED
class.c
#include "class.h"
struct _ClassName
{
GtkWidget parent;
};
G_DEFINE_TYPE(ClassName, class_name, GTK_TYPE_WIDGET);
static void class_name_init(ClassName *self)
{
gtk_widget_set_name(self, "Widget");
}
static void class_name_class_init(ClassNameClass *klass)
{
}
ClassName *class_name_new()
{
return g_object_new(CLASS_NAME_TYPE, /* "foo", bar ,*/ NULL);
}
Inфункция static void class_name_init(ClassName *self)
, я хочу использовать указатель self примерно так
gtk_widget_set_name(self, "Widget");
Здесь у меня есть совместимый тип указателя.gtk_widget_set_name () ожидает тип GtkWidget в качестве входа, но функция init имеет тип ClassName .
Gtk знает, что ClassName - это тот же тип, что и GtkWidget, поэтому кодработает, но в любом случае можно исправить код, чтобы компилятор не считал его ошибкой