使用由结构指向的指针中的变量,该结构(该结构)指针被发送到需要使用它的函数
Use a variable from pointer that is pointed by a struct which (that structs') pointer is sent to a function that needs to use it
嗯,这是一种截获。
所以。
我使用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;
void*类型的指针是泛型指针。如果不将其转换为原始类型,则不能对其进行任何操作。
userdata* userData = static_cast<userdata*>(data);
GtkWidget* button1 = userData->button1;
GtkWidget* button2 = userData->button2;
如果您使用的是void *
指针,请确保在必要时将其强制转换为特定的指针类型,如下所示。
void resetbuttonsize(GtkWindow *window, GdkEvent *event, gpointer data){
userdata * data1 = static_cast<userdata*>(data);
GtkWidget *button1 = data1->button1;
}
其次,你的结构userdata
没有成员button
,你必须使用button1
或button2
相关文章:
- 如何在 C# 中映射双 C 结构指针?
- C++:映射结构中的结构指针
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- 类的静态结构指针声明在C++
- 在两个.cpp文件之间定义全局类/结构指针
- 返回对常量结构(指针类型)成员的引用:明显的左值到右值转换
- 是否可以将无符号字符数组reinterpret_cast到仅包含C++中无符号字符成员的结构指针
- 如何在地图中使用结构指针
- 结构指针在"新"调用上给出已分配的地址?
- 铸造结构指针指向C 的工会指针
- c++ 结构指针在初始化为 NULL 时无法读取内存
- 函数中的结构指针的地址为0x1
- C 用结构指针初始化结构
- C 结构指针铸成数组Interop C#
- 方法中不允许访问结构指针
- 如何打印出结构指针
- MPI_Op_create:候选功能不可行.自定义结构指针不能解释为空指针
- 尝试将结构指针传递给类时出错
- 初始化结构指针的值
- 使用 pybind11 将自定义结构(指针向量)从 C++ 传递到 python 的方法是什么?