如何使指针在新结构中兼容?
How do I make pointers compatible in a new struct?
我正在尝试 'inherit' GtkWidget。我可以继承任何其他小部件,如 GtkWindow 等,并在其自己的文件中实现其方法。然后我将使用 returns 小部件这样的功能加载新小部件 return g_object_new(...
.
代码工作正常,但我在 struct init 函数中收到 incompatible pointer type 警告。
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);
}
在函数static void class_name_init(ClassName *self)
中,我想像这样使用指针self
gtk_widget_set_name(self, "Widget");
这是我拥有兼容指针类型的地方。 gtk_widget_set_name() 期望类型 GtkWidget 作为输入,但 init 函数的类型为 ClassName.
Gtk 知道 ClassName 是与 GtkWidget 相同的类型,因此代码可以工作,但无论如何都要修复代码,以便编译器不会认为它是一个错误
一般来说,假设 self 是一个指针,你应该使用 cast 运算符来避免编译器警告:
gtk_widget_set_name((GtkWidget*)self, "Widget");
定义对象也是如此GTK_WIDGET(obj)
而不是
gtk_widget_set_name(self, "Widget");
做
gtk_widget_set_name(GTK_WIDGET(self), "Widget");`
如果 self 是 window GTK_WINDOW(self)
,您始终可以定义对象
我正在尝试 'inherit' GtkWidget。我可以继承任何其他小部件,如 GtkWindow 等,并在其自己的文件中实现其方法。然后我将使用 returns 小部件这样的功能加载新小部件 return g_object_new(...
.
代码工作正常,但我在 struct init 函数中收到 incompatible pointer type 警告。
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);
}
在函数static void class_name_init(ClassName *self)
中,我想像这样使用指针self
gtk_widget_set_name(self, "Widget");
这是我拥有兼容指针类型的地方。 gtk_widget_set_name() 期望类型 GtkWidget 作为输入,但 init 函数的类型为 ClassName.
Gtk 知道 ClassName 是与 GtkWidget 相同的类型,因此代码可以工作,但无论如何都要修复代码,以便编译器不会认为它是一个错误
一般来说,假设 self 是一个指针,你应该使用 cast 运算符来避免编译器警告:
gtk_widget_set_name((GtkWidget*)self, "Widget");
定义对象也是如此GTK_WIDGET(obj)
而不是
gtk_widget_set_name(self, "Widget");
做
gtk_widget_set_name(GTK_WIDGET(self), "Widget");`
如果 self 是 window GTK_WINDOW(self)