2011-05-02 11 views
0

私はこのようなことをしていますが、エラーを投げます。変数を持たないGSListにどのように配列を追加できますか?

私は変数を配列に入れてそのように渡しますが、これはパターン化されていないデータのようなほぼ500行を見ています。

また、GSListを使用しての全体のポイントは、ギザギザの配列

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

編集の制限を回避することだった(だから私はループを使用することはできません): `でキャストを(INT [])与える:

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 

編集:リテラルコピーは、それがスコープ外ではありません表示するように貼り付ける(これは.hファイルのトップレベルにある、注意してください):

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

メインファイル

#include "csgtk.h" 

GHashTable * widgetbuffer; 
[...] 

答えて

1

問題はコンパイラが使用するアレイのタイプが何であるかを知らないので、このような何かが動作するはずということです。あなたは(N ²)Oを打つことになるだろうここにいるので、あなたはこれをやっているか、単一の静的定数配列を作成し、あなたのGSListにそれを追加する方が良いだろう考慮すべきであるしかし

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

すべての追加のためにリストを歩かなければならないので、実行時間の種類。

+0

しかし、私は、単一のアレイは、それはそれはすべて同じGSlist項目で終わるだろうという意味ではありませう追加した場合は? –

+0

私はこの問題を解決するために、メイン・ポストを更新しました。 –

+0

後で 'g_slist_prepend()'と 'g_slist_reverse()'を使ってパフォーマンスの問題を解決することができましたが、まだ実行できません。 –

0

ちょうど同じことを試みました。 Debian unstable amd64上のgcc 4.7.1。 BTW、(int []){1, 2, 3}はISO C99複合リテラルです。

#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

関連する問題