Я пытаюсь создать макрос, который будет отличать gpointer
до GType
и наоборот. Я создал следующие макросы, чтобы сделать это, используя соответствующий API documentation в качестве руководства:Правильный способ бросить 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));
Однако, это кажется проблематичным, поскольку мой компилятор указывает, что неявное объявление было сделано с помощью литья g_hash_table_lookup
и с третьим аргументом Следующий 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 lookup error
из в undefined symbol: GPOINTER_TO_GTYPE
.
Может ли кто-нибудь посоветовать, что я могу сделать, чтобы исправить это?