【问题标题】:g_list_append gives a error when i try to complieg list_append 在我尝试编译时出错
【发布时间】:2013-04-03 18:00:34
【问题描述】:

操作系统 = 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`

【问题讨论】:

    标签: c++ compilation glibmm


    【解决方案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++ 版本中所述。

    【讨论】:

    • 哦,我现在傻了。我能找到的所有示例都没有使用 (gpointer)"A1" tho。
    • @lasvig:所有示例可能都没有使用 -Wall 编译。 :)
    猜你喜欢
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多