C++ 点击获取价值

C++ 点击获取价值,c++,c,gtk,gtk3,C++,C,Gtk,Gtk3,我需要在单击文本时获取一个值,但由于某种原因,指针丢失并返回一个随机值,我想这样做: static void click(GtkWidget* widget, long* click){ cout << "Long value is: " << *click << endl; } int main(){ gtk_init(0,0); //......... MORE CODE ...... GtkWidget* lab

我需要在单击文本时获取一个值,但由于某种原因,指针丢失并返回一个随机值,我想这样做:

static void click(GtkWidget* widget, long* click){
 cout << "Long value is: " << *click << endl;
}

int main(){
   gtk_init(0,0);
   //......... MORE CODE ......
   GtkWidget* label  = gtk_image_menu_item_new_with_label(text);
   long value = 50509;
   g_signal_connect(label, "button_press_event", G_CALLBACK(click), &value);
   //......... MORE CODE ......
   gtk_main();
}
静态无效单击(GtkWidget*小部件,长*单击){

cout我发现了错误,这是一个非常简单的错误,当我在函数中传递一个值时,g_signal_connect,它变成了一个gpointer,指针支持32位数据,而long消耗64位,我将long改为int,它工作得非常好!。 解决方案:

static void click(GtkWidget *widget,GdkEvent  *event, gpointer  data){
 cout << "Int value is: " << GPOINTER_TO_INT(data) << endl;
}

int main(){
   gtk_init(0,0);
   //......... MORE CODE ......
   GtkWidget* label  = gtk_image_menu_item_new_with_label(text);
   int value = 50509;
   g_signal_connect(label, "button_press_event", G_CALLBACK(click), GINT_TO_POINTER(value));
   //......... MORE CODE ......
   gtk_main();
}
static void单击(GtkWidget*小部件、GdkEvent*事件、gpointer数据){

你从哪里得到的
点击
的函数签名?检查传递了哪些参数。你实际上是在使用
事件
参数为什么要传递一个整数作为指针?你仍然可以将它作为地址传递。你只需将
gpointer
转换为
long*
。或者使用
(long*)数据< /代码>或C++等价物。@ Gerhardh,我也尝试过,但是我没有成功,它一直在打破真正的价值,我唯一的解决办法是用“int”。如果你使用<代码> GsiZeToPoTeIn()/<代码>和<代码> GPOTINTION tox siz()<代码>?