c++ - 使用由结构指向的指针中的变量,该结构(该结构的)指针被发送到需要使用它的函数

标签 c++ pointers struct gtk pointer-to-pointer

好吧,那是一种指针感知。
所以。
我正在使用 gtk+
在 gtk 中,我这样定义按钮:

GtkWidget *button1, *button2;

所以我需要一个函数来做一些事情。所以我创建了一个结构体来保存指向它的指针
在这里:

typedef struct userdata{
    GtkWidget *button1, *button2;
}userdata;

我将 struct 的指针指向 main 的指针:

userdata data;
data.button1 = button1;
data.button2 = button2;

然后我将这个结构与 gtk 事件一起使用:

g_signal_connect(G_OBJECT(window), "configure-event", G_CALLBACK(resetbuttonsize), &data);

问题来了。我想用我刚发送给函数的这些变量做一些事情,例如调整它们的大小,所以我做这样的事情:

void resetbuttonsize(GtkWindow *window, GdkEvent *event, gpointer data){
    GtkWidget *button1 = data->button;
}

所以我可以做类似的事情:

gtk_widget_set_size_request(button1, 40, 40);

可悲的是,我不能这样做 (GtkWidget *button1 = data->button;) 因为我得到以下编译器错误:

/media/dysk250/pmanager/testfile/main.cpp|59|error: ‘gpointer {aka void*}’ is not a pointer-to-object type|

谁能告诉我我做错了什么? 我是指针的新手,也许我可以解决单指针指针问题,但这对我的大脑来说太多了,无法理解正在发生的事情以及为什么我使用的代码是错误的。

最佳答案

您需要将 void* 变量转换为可以取消引用的合适指针:

GtkWidget *button1 = static_cast<userdata*>(data)->button;

关于c++ - 使用由结构指向的指针中的变量,该结构(该结构的)指针被发送到需要使用它的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39206008/

相关文章:

c++ - 访问私有(private)类 C++ 内部的结构

c++ - Boost::log 静态工厂方法

c++ - 尝试递增 initializer_list.begin() 返回的迭代器时出现编译错误

c++ - if 语句中的多个条件

c++ - 堆指针分配之间的差异

c - C中一对数据结构的不兼容指针类型

sql - 构建结构然后填充查询中的值?

c++ - 使用opencv将像素数据分配到 vector 中

c - 与GCC中的间接访问相比,为什么直接访问结构成员会产生更多的汇编代码?

c++遍历列表以调用某个函数