gpt4 book ai didi

c++ - 传递给 GTK 回调时取消引用 C++ 中的字符串 vector

转载 作者:行者123 更新时间:2023-11-28 01:51:47 27 4
gpt4 key购买 nike

我有这段代码试图将 vector 传递给回调函数:

static void displayvecchoices( GtkWidget *widget, gpointer   data ) {
std::vector<std::string> vecp = *(std::vector<std::string> *)(data);
std::cout<<"vec: "<<vecp[0]<<std::endl;
}

int main(int argc, char *argv[] ) {

GtkWidget *window;
GtkWidget *display;

gtk_init(&argc, &argv);

window = gtk_dialog_new ();
g_signal_connect (window, "destroy", G_CALLBACK (destroy), NULL);
gtk_window_fullscreen (GTK_WINDOW(window));

std::vector<std::string> vec;
vec.push_back("1");

display = gtk_button_new_with_label ("Display");
g_signal_connect_swapped (display, "clicked", G_CALLBACK (displayvecchoices), &vec);
gtk_widget_set_can_default (display, TRUE);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), display, TRUE, TRUE, 0);
gtk_widget_grab_default (display);
gtk_widget_show (display);

gtk_main();

return 0;
}

单击按钮显示时,出现“错误分配”错误,程序崩溃。

当我尝试这样做时:

std::vector<std::string>* vecp = (std::vector<std::string> *)(data);
std::cout<<"vec: "<<(*vecp)[0]<<std::endl;

它打印出 vec: 但没有元素,据说大小是 vector 的 18446744073706420840。

最佳答案

看起来,你的回调参数被交换了:

  • 您应该使用 g_signal_connect_object 而不是 g_signal_connect_swapped

  • displayvecchoices 声明更改为

    static void displayvecchoices(gpointer   data, GtkWidget *widget)

关于c++ - 传递给 GTK 回调时取消引用 C++ 中的字符串 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42767149/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com