当我尝试编译时,G_list_append给出了一个错误

g_list_append gives a error when i try to complie

本文关键字:错误 一个 list 编译 append      更新时间:2023-10-16

OS = linux (Fuduntu 2013.2)

我试图在我的程序中使用列表,但当我调用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`

这不是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++版本中所解释的那样。

相关文章: