我有下面的代码行简单:“数组类型的元素类型不完整”是什么意思?
但
$gcc `pkg-config --cflags --libs glib-2.0` ./main.c
提供了以下错误:
./main.c:N: error: array type has incomplete element type
我不明白为什么元素类型是不完整的。 GHashTable
完全在glib.h
中指定。
在此先感谢您的帮助。
我有下面的代码行简单:“数组类型的元素类型不完整”是什么意思?
但
$gcc `pkg-config --cflags --libs glib-2.0` ./main.c
提供了以下错误:
./main.c:N: error: array type has incomplete element type
我不明白为什么元素类型是不完整的。 GHashTable
完全在glib.h
中指定。
在此先感谢您的帮助。
这大概意味着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];
你可以有指向不完全类型的数组没有问题。
你确定吗?从glib.h复制/粘贴规范。 (我的glib.h不包含GHashTable的定义)。
你需要使用一个指针,而不是一个值:
GHashTable* htbls[3];
问:GHashTable不是完全在glib.h中指定的吗?
答:不可以。
如果你想有一个哈希表,你应该使用g_hash_table_new(),g_hash_table_add()和朋友们:
换句话说,“结构_GHashTable“对您的应用程序不透明。
如果你真的想要一个GHashTables数组,那么你需要一个“GHashTable *”数组。你需要用自己的新哈希表明确地初始化数组中的每个元素。
是的,它的定义如下:'typedef struct _GHashTable GHashTable;'(glib2为'glib/ghash.h',为glib1为'glib.h'),没有定义'_GHashTable'。 – AusCBloke