C 将结构传递给回调函数

C 将结构传递给回调函数,c,linux,gtk,glib,C,Linux,Gtk,Glib,我正在尝试传递多个变量(gtkentry和FILE): 编译时,出现以下错误: file.h:7:45: error: request for member 'entry' in something not a structure or union g_print(gtk_entry_get_text(callback_params.entry)); 是否需要强制转换gpointer?您正在不兼容的类型之间转换。假设您使用的是GTK,GTK\u entry\u get\u text()

我正在尝试传递多个变量(gtkentry和FILE):

编译时,出现以下错误:

file.h:7:45: error: request for member 'entry' in something not a structure or union
    g_print(gtk_entry_get_text(callback_params.entry));

是否需要强制转换
gpointer

您正在不兼容的类型之间转换。假设您使用的是GTK,
GTK\u entry\u get\u text()
的原型是:

const gchar * gtk_entry_get_text (GtkEntry *entry);
同时,您的函数声明了一个
gpointer
,它的
glib
转换为:

typedef void* gpointer;
换句话说,您正试图访问
void
指针的成员。编译器无法计算所需的偏移量或类型,因此会抛出错误

您需要做的是将
gpointer
强制转换为适当的类型,然后将其作为指向结构的指针进行访问以下是如何使用当前函数执行此操作的示例:

void add_new_set (GtkDialog *dialog, gint response_id, gpointer callback_params) {
    g_print (gtk_entry_get_text (((struct data *) callback_params)->entry));
}

这里,
struct data*
将无效指针强制转换为指向类型为
data
struct
的指针,然后
->
取消对指针的引用并返回相应字段。

您正在不兼容类型之间转换。假设您使用的是GTK,
GTK\u entry\u get\u text()
的原型是:

const gchar * gtk_entry_get_text (GtkEntry *entry);
同时,您的函数声明了一个
gpointer
,它的
glib
转换为:

typedef void* gpointer;
换句话说,您正试图访问
void
指针的成员。编译器无法计算所需的偏移量或类型,因此会抛出错误

您需要做的是将
gpointer
强制转换为适当的类型,然后将其作为指向结构的指针进行访问以下是如何使用当前函数执行此操作的示例:

void add_new_set (GtkDialog *dialog, gint response_id, gpointer callback_params) {
    g_print (gtk_entry_get_text (((struct data *) callback_params)->entry));
}

这里,
struct data*
将空指针强制转换为指向
data
类型的
struct
的指针,之后,
->
取消引用指针并返回相应的字段。

并且
gpointer
的定义是?指针,我看不出你要用它去哪里。是的,你需要投射
gpointer
gpointer
是非类型指针;它不知道它包含什么。您给它一个指向
结构数据的指针
,因此您必须将其转换回
结构数据*
。在C和C++中,访问结构指针的成员是<代码> -> ,不是<代码> .<代码>。对于正常结构,您可以发布调用函数“代码> AdjNexSyt())的代码的一部分吗??而
gpointer
的定义是?指针,我不知道你要用它去哪里。是的,你需要投射
gpointer
gpointer
是非类型指针;它不知道它包含什么。您给它一个指向
结构数据的指针
,因此您必须将其转换回
结构数据*
。在C和C++中,访问一个结构的指针成员的操作符是“代码> -> <代码>,而不是<代码> .<代码>,就像正常结构一样。你可以把你调用的函数的代码部分放在代码“代码> AddixNexStand())/<代码>下面吗?(TAT:14122):Gtk CRITICAL**:IA_ugtk_entry_get_text:assertion'Gtk_IS_entry(entry)'failed(tat:14122):GLib CRITICAL**:g_print:assertion'format!=NULL“失败且未打印任何符号”我获得以下信息:(tat:14122):Gtk关键**:IA_uGTK_条目u获取文本:断言“Gtk_是_条目(条目)”失败(tat:14122):GLib关键**:g_打印:断言格式!=NULL'失败,未打印任何符号