gpt4 book ai didi

c - 如何使指针在新结构中兼容?

转载 作者:行者123 更新时间:2023-12-02 23:04:32 25 4
gpt4 key购买 nike

我正在尝试“继承”一个 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);
}

在函数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 是一个指针,您应该使用强制转换运算符来避免编译器警告:

gtk_widget_set_name((GtkWidget*)self, "Widget");

关于c - 如何使指针在新结构中兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55916201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com