2012-09-28 60 views
1

我有下面的代码行简单:“数组类型的元素类型不完整”是什么意思?

​​

$gcc `pkg-config --cflags --libs glib-2.0` ./main.c 

提供了以下错误:

./main.c:N: error: array type has incomplete element type 

我不明白为什么元素类型是不完整的。 GHashTable完全在glib.h中指定。

在此先感谢您的帮助。

回答

7

这大概意味着GHashTable没有在你包含头完全确定。也就是说,有可能在glib.h或文件中的一个,它包括读取类似的一行:

typedef struct GHashTable GHashTable; 

结构变量可能是在不改变我的观点不同。必须有类似的东西,否则你会得到关于GHashTable无法被识别为一个类型名称不同的信息:

error: unknown type name 'GHashTable' 

提供了关于<glib.h>结构没有额外的信息;你不需要知道它就可以使用它。散列表函数的API可能仅适用于GHashTable *值,所以您不需要知道里面的内容,也不需要知道FILE *中的内容,以便能够在代码中使用它(尽管这样的宏观化函数因为getchar()可能需要知道FILE *的内部;也许更好的比喻是DIR *,但这是一个POSIX接口,不一定是众所周知的)。

这意味着你将需要使用:

GHashTable *htbls[3]; 

你可以有指向不完全类型的数组没有问题。

+0

是的,它的定义如下:'typedef struct _GHashTable GHashTable;'(glib2为'glib/ghash.h',为glib1为'glib.h'),没有定义'_GHashTable'。 – AusCBloke

5

你确定吗?从glib.h复制/粘贴规范。 (我的glib.h不包含GHashTable的定义)。

你需要使用一个指针,而不是一个值:

GHashTable* htbls[3]; 
5

问:GHashTable不是完全在glib.h中指定的吗?

答:不可以。

如果你想有一个哈希表,你应该使用g_hash_table_new(),g_hash_table_add()和朋友们:

换句话说,“结构_GHashTable“对您的应用程序不透明。

如果你真的想要一个GHashTables数组,那么你需要一个“GHashTable *”数组。你需要用自己的新哈希表明确地初始化数组中的每个元素。

相关问题