g_list_append выдает ошибку при попытке выполнить

ОС = 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

Решение

Это не проблема 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 ++ документации библиотеки.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]