Frage

Ich arbeite mit so etwas, aber es wirft Fehler.

Ich würde das Array einfach in eine Variable setzen und es so übergeben, aber ich schaue fast 500 Zeilen wie die von nicht launenden Daten. (Also kann ich keine Schleife verwenden)

Außerdem bestand der springende Punkt bei der Verwendung einer GSLILT, um die Einschränkungen gezackter Arrays zu vermeiden

list43333 = g_slist_append(list43333,{11,12,13,14,15,17,18,20,22,25,30});

Bearbeiten: Casting mit `(int []) gibt:

csgtk.h:14: warning: data definition has no type or storage class
csgtk.h:14: warning: type defaults to ‘int’ in declaration of ‘list43333’
csgtk.h:14: error: conflicting types for ‘list43333’
csgtk.h:12: note: previous definition of ‘list43333’ was here
csgtk.h:14: warning: passing argument 1 of ‘g_slist_append’ makes pointer from integer without a cast
/usr/include/glib-2.0/glib/gslist.h:52: note: expected ‘struct GSList *’ but argument is of type ‘int’
csgtk.h:14: warning: initialization makes integer from pointer without a cast
csgtk.h:14: error: initializer element is not constant

Bearbeiten: Literaler Kopierpaste, um anzuzeigen, dass es nicht aus dem Umfang ist (Hinweis, dies befindet sich in der obersten Ebene einer .h -Datei):

GSList * list43333 = NULL;
list43333 = g_slist_prepend(list43333,(int[]){});

Hauptdatei

#include "csgtk.h"

GHashTable * widgetbuffer;
[...]
War es hilfreich?

Lösung

Das Problem ist, dass der Compiler nicht weiß, was der Typ Ihres Arrays ist, also sollte so etwas funktionieren.

list43333 = g_slist_append(list43333,(int[]){11,12,13,14,15});

Sie sollten jedoch überlegen, wie Sie dies tun, es wäre besser, ein einzelnes statisches konstantes Array zu erstellen und dies zu Ihrem hinzuzufügen GSList Seit hier werden Sie eine Art Laufzeit von O (n²) treffen, da es für jede Anhang auf die Liste gehen muss.

Andere Tipps

Ich habe gerade dasselbe ausprobiert und es funktioniert. GCC 4.7.1 über Debian instabiler AMD64. Übrigens, (int []){1, 2, 3} ist iso c99 zusammengesetzte Literale.

#include <glib.h>

int main()
{
        GSList *l;

        l = g_slist_alloc();
        l = g_slist_append(l, (int []){1, 2, 3});

        return 0;
}

$ gcc -Wall -Wextra -g $(pkg-config --cflags --libs glib-2.0) main.c

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top