如何从gpointer获取变量,以便我可以使用它。
void
right_y (GtkButton *button, gpointer on)
{
right(on);
}
这是回调部分 char on =“y”的行;发出警告:初始化从指针生成整数而没有强制转换[-Wint-conversion]
gsignal行给出警告:从不同大小的整数转换为指针[-Wint-to-pointer-cast]
char on = "y";
button = gtk_button_new_with_label ("Led On");
g_signal_connect (button, "clicked", G_CALLBACK (right_y), (gpointer) on);
我已经尝试了几种不同的方法,仍然无法得到它。
感谢。
答案 0 :(得分:1)
char on = "y";
声明on
持有一个 char
。字符串不止一个char
,因此您需要将它们存储为char
的指针或char
的数组。
问题是您希望能够使用on
确定要使用的正确类型。但我想,鉴于帖子中你已经知道的错误的性质,并且被gpointer
混淆了。
gpointer
基本上是
typedef void *gpoiner;
这就是您不需要使用*
指定gpointer
的原因。不要让这个欺骗你;当您在gpointer
旁边使用其他指针类型时,您仍需要其他指针类型的*
!
g_signal_connect()
行也是错误的; gpointer on
毫无意义。
如果您仍然不明白我在说什么,请告诉我。
好的,为什么呢
char on = "y";
吐出消息
warning: initialization makes integer from pointer without a cast [-Wint-conversion]
"y"
是一个指针。它计算为const char *
类型的表达式。指针可能位于可执行文件的代码部分,无法修改它(因此const
)。
char
是一个整数,而不是指针。您通常不应该将指针值推送到整数,除非您明确要求它,因为您最终可能会使用一个太小而不能存储指针的整数类型。 (对于那些必要时,C标准提供intptr_t
和uintptr_t
。)在这种情况下,你没有问,所以编译器想要确保你真的意味着你想要将指针的地址推送到char
。
请注意有关使用小于必要的整数的部分。这就是为什么你的g_signal_connect()
行打印它所做的警告的原因:char
不足以存储指针,因此将char
值视为指针一定会产生非常糟糕的事情。< / p>
答案 1 :(得分:0)
这是我正在寻找的代码。
有关回调的代码。
char *on = 'n';
button = gtk_button_new_with_label ("Led On");
g_signal_connect (button, "clicked", G_CALLBACK (right_y), on);
用户功能的代码。
static void
right_y (GtkButton *button, gpointer on)
{
int led_on = on;
right(led_on);
}
来自function right()的相关片段
void right(char state) {
buf[0] = state;
int bytes_written = 0;
bytes_written = write(s, buf, strlen(buf));
}
第char *on = 'n';
行会发出警告
initialization makes pointer from integer without a cast [-Wint-conversion]
我认为这是可以的,因为虽然可能有更好的方法来初始化指针,但指针却是预期的。
行led_on = on;
提供警告
initialization makes integer from pointer without a cast [-Wint-conversion]
同样可能有更好的方法,但目的是传递变量而不是指针。我已经测试了几次,它没有失败,所以我会接受它。