2011-05-02 72 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

的問題是,編譯器不知道你的陣列的類型是什麼,所以這樣的事情應該工作。

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

但是你應該考慮你怎麼這樣,這將是更好地使一個單一的靜態常量數組,並添加到您的GSList,因爲在這裏你會被打爲O(n ²)因爲它必須遍歷每個追加的列表。

+0

但是,如果我添加了一個數組不會意味着它會都在同GSlist項目結束了? – 2011-05-02 16:27:43

+0

我收到錯誤,更新了主帖。 – 2011-05-02 16:33:09

+0

之後我可以使用'g_slist_prepend()'然後'g_slist_reverse()'來解決性能問題,但是我仍然無法運行它。 – 2011-05-02 18:04:39

0

只是試過同樣的事情,它的工作原理。 gcc 4.7.1在Debian不穩定的amd64上。 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