OS = linux(Fuduntu 2013.2)
我想在我的程序中使用GList但是当我调用g_list_append时我得到了这个错误
error: invalid conversion from ‘const void*’ to ‘gpointer {aka void*}’ [-fpermissive]
In file included from /usr/include/glib-2.0/glib/ghash.h:35:0,
from /usr/include/glib-2.0/glib.h:52,
from /usr/include/glib-2.0/gobject/gbinding.h:30,
from /usr/include/glib-2.0/glib-object.h:25,
from /usr/include/glib-2.0/gio/gioenums.h:30,
from /usr/include/glib-2.0/gio/giotypes.h:30,
from /usr/include/glib-2.0/gio/gio.h:28,
from /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:30,
from /usr/include/gtk-2.0/gdk/gdk.h:32,
from /usr/include/gtk-2.0/gtk/gtk.h:32,
from main.cpp:4:
/usr/include/glib-2.0/glib/glist.h:61:10: error: initializing argument 2 of ‘GList* g_list_append(GList*, gpointer)’ [-fpermissive]
这里是包含g_list_append
的代码的一部分#include<iostream>
#include <stdio.h>
#include<gtk/gtk.h>
#include<glibmm.h>
int main(){
GList *glist_forleg = NULL;
glist_forleg = g_list_append(glist_forleg, "A1");
return 0;
}
用
编译g++ -o kabel main.cpp strukt.cpp -lm -Wall `pkg-config --cflags --libs glibmm-2.4` `pkg-config --cflags --libs gtk+-2.0`
答案 0 :(得分:1)
这不是一个GLib问题(尽管你应该使用C ++类而不是C版本),而是因为引用的字符串是const
。您尝试使用的函数使用void *
指针而不是const void *
指针,这是错误试图告诉您的。
这是一个固定的例子:
#include <glib.h>
int main(){
GList *list = NULL;
list = g_list_append(list, (gpointer)"A1");
return 0;
}
...将字符串转换为gpointer
(又名void *
)而不是const void *
。编译,例如用:
cc -Wall -o test test.c $(pkg-config --cflags --libs glib-2.0)
然而,这是一个坏主意,因为字符串不一定会留在内存中,导致指针指向不属于您的内存,并导致内存故障。一个更好的想法(假设你记得以后再用它)可能是使用g_strdup
来复制内存中的字符串,或者只是使用GLibmm提供的类型,如库文档的C ++版本中所述。