编译器类型转换警告和错误
if(xmlStrEquals(cur->name, (const xmlChar *) "check")) // Find out which type it is
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, xmlGetProp(cur,"name"))),(gboolean) xmlGetProp(cur,"value"));
else if(xmlStrEquals(cur->name, (const xmlChar *) "spin"))
gtk_adjustment_set_value(GTK_ADJUSTMENT (gtk_builder_get_object (builder, xmlGetProp(cur,"name"))),(gdouble) xmlGetProp(cur,"value"));
else if(xmlStrEquals(cur->name, (const xmlChar *) "combo"))
gtk_combo_box_set_active(GTK_COMBO_BOX (gtk_builder_get_object (builder, xmlGetProp(cur,"name"))),(gint) xmlGetProp(cur,"value"));
下面的 3 个错误对应上面的 3 个 if 语句。
main.c:125: warning: cast from pointer to integer of different size
main.c:130: error: pointer value used where a floating point value was expected
main.c:139: warning: cast from pointer to integer of different size
如果您允许我提取有问题的部分:
(gboolean) xmlGetProp(cur,"value")
(gdouble) xmlGetProp(cur,"value")
(gint) xmlGetProp(cur,"value")
为什么这些类型转换会导致这些错误?我该如何修复它们?
尝试使用 (gboolean *)
等收到了来自 gtk 的警告,内容如下:
warning: passing argument 2 of ‘gtk_toggle_button_set_active’ makes integer from pointer without a cast
/usr/include/gtk-2.0/gtk/gtktogglebutton.h:82: note: expected ‘gboolean’ but argument is of type ‘gboolean *’
error: incompatible type for argument 2 of ‘gtk_adjustment_set_value’
/usr/include/gtk-2.0/gtk/gtkadjustment.h:93: note: expected ‘gdouble’ but argument is of type ‘gdouble *’
warning: passing argument 2 of ‘gtk_combo_box_set_active’ makes integer from pointer without a cast
/usr/include/gtk-2.0/gtk/gtkcombobox.h:99: note: expected ‘gint’ but argument is of type ‘gint *’
if(xmlStrEquals(cur->name, (const xmlChar *) "check")) // Find out which type it is
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, xmlGetProp(cur,"name"))),(gboolean) xmlGetProp(cur,"value"));
else if(xmlStrEquals(cur->name, (const xmlChar *) "spin"))
gtk_adjustment_set_value(GTK_ADJUSTMENT (gtk_builder_get_object (builder, xmlGetProp(cur,"name"))),(gdouble) xmlGetProp(cur,"value"));
else if(xmlStrEquals(cur->name, (const xmlChar *) "combo"))
gtk_combo_box_set_active(GTK_COMBO_BOX (gtk_builder_get_object (builder, xmlGetProp(cur,"name"))),(gint) xmlGetProp(cur,"value"));
The 3 errors below correspond to the 3 if statements above.
main.c:125: warning: cast from pointer to integer of different size
main.c:130: error: pointer value used where a floating point value was expected
main.c:139: warning: cast from pointer to integer of different size
If you will allow me to extract the offending parts:
(gboolean) xmlGetProp(cur,"value")
(gdouble) xmlGetProp(cur,"value")
(gint) xmlGetProp(cur,"value")
Why are these typecasts causing these errors? How can I fix them?
Trying to use (gboolean *)
etc recieved warnings from gtk along the lines of:
warning: passing argument 2 of ‘gtk_toggle_button_set_active’ makes integer from pointer without a cast
/usr/include/gtk-2.0/gtk/gtktogglebutton.h:82: note: expected ‘gboolean’ but argument is of type ‘gboolean *’
error: incompatible type for argument 2 of ‘gtk_adjustment_set_value’
/usr/include/gtk-2.0/gtk/gtkadjustment.h:93: note: expected ‘gdouble’ but argument is of type ‘gdouble *’
warning: passing argument 2 of ‘gtk_combo_box_set_active’ makes integer from pointer without a cast
/usr/include/gtk-2.0/gtk/gtkcombobox.h:99: note: expected ‘gint’ but argument is of type ‘gint *’
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
xmlGetProp
函数 返回一个字符串(如xmlChar *
):调用者负责将该字符串解析为所需的任何形式(浮点、整数、布尔值……)。另请注意,调用者也负责释放返回的
xmlChar *
字符串。要解决您的问题,您需要以通常的方式将字符串转换为您需要的内容。并且不要忘记
xmlFree
返回的字符串。The
xmlGetProp
function returns a string (asxmlChar *
):The caller is responsible for parsing that string into whatever form (floating point, integer, boolean, ...) is needed. Also note that the caller is responsible for freeing the returned
xmlChar *
string too.To fix your problem, you need to convert the string to what you need in the usual manner. And don't forget to
xmlFree
the returned strings.我像这样修复了它:
仍然不知道为什么会起作用,但我可以猜测。
I fixed it like so:
Still don't know why that worked, but I can guess.