Types 将gpointer强制转换为GType的正确方法
我正在尝试创建一个宏,它将把Types 将gpointer强制转换为GType的正确方法,types,macros,glib,gnome,Types,Macros,Glib,Gnome,我正在尝试创建一个宏,它将把gpointer转换为GType,反之亦然。我已经创建了以下宏来执行此操作,并使用相关的作为指南: #ifdef GTYPE_TO_POINTER #define GTYPE_TO_POINTER (x) (GSIZE_TO_POINTER (x)) #endif #ifdef GPOINTER_TO_GTYPE #define GPOINTER_TO_GTYPE(p) (GPOINTER_TO_SIZE (p)) #endif 我已按如下方式进行了铸造:
gpointer
转换为GType
,反之亦然。我已经创建了以下宏来执行此操作,并使用相关的作为指南:
#ifdef GTYPE_TO_POINTER
#define GTYPE_TO_POINTER (x) (GSIZE_TO_POINTER (x))
#endif
#ifdef GPOINTER_TO_GTYPE
#define GPOINTER_TO_GTYPE(p) (GPOINTER_TO_SIZE (p))
#endif
我已按如下方式进行了铸造:
type = (GType)g_hash_table_lookup(typeTable, GUINT_TO_POINTER(tflag));
type = GPOINTER_TO_GTYPE(g_hash_table_lookup(typeTable, GUINT_TO_POINTER(tflag)));
// stuff
g_hash_table_insert(typeTable,
GUINT_TO_POINTER(tflag),
GTYPE_TO_POINTER(type));
我想做如下的演员:
type = (GType)g_hash_table_lookup(typeTable, GUINT_TO_POINTER(tflag));
type = GPOINTER_TO_GTYPE(g_hash_table_lookup(typeTable, GUINT_TO_POINTER(tflag)));
// stuff
g_hash_table_insert(typeTable,
GUINT_TO_POINTER(tflag),
GTYPE_TO_POINTER(type));
然而,这似乎是有问题的,因为我的编译器指示已使用g_hash_table_lookup
cast和以下g_hash_table_insert
warning: implicit declaration of function 'GPOINTER_TO_GTYPE'
warning: implicit declaration of function 'GTYPE_TO_POINTER'
warning: passing argument 3 of 'g_hash_table_insert' makes pointer from integer without a cast [-Wint-conversion]
另外,当我尝试运行包装器时,我得到一个java:symbol查找错误,该错误是未定义的symbol:GPOINTER\u to_GTYPE
有谁能建议我可以做些什么来解决这个问题吗?好的,我现在似乎已经自己解决了
首先,我在检查GTYPE_TO_指针
和GPOINTER_TO_GTYPE
时使用了错误的测试,因为它们是我想要定义的变量,编译器找不到它们,而且从未做出定义
其次,我使用未定义的变量作为参数,因此这些宏的正确定义似乎是:
#ifdef GPOINTER_TO_SIZE
#define GPOINTER_TO_GTYPE(gpointer) (GPOINTER_TO_SIZE (gpointer))
#endif
#ifdef GSIZE_TO_POINTER
#define GTYPE_TO_POINTER(gtype) (GSIZE_TO_POINTER(gtype))
#endif
这意味着我的casting函数现在可以顺利编译了