我有以下简单的代码行:
#include <glib.h>
#include <stdio.h>
void my_func () {
GHashTable htbls[3]; /* ASSUME LINE NUMBER IS N */
/* Do something */
}
int main (int argc, char *argv[]) {
my_func ();
return 0;
}
但是
$gcc `pkg-config --cflags --libs glib-2.0` ./main.c
出现以下错误:
./main.c:N: error: array type has incomplete element type
我不明白为什么元素类型不完整。 GHashTable
完全在glib.h
中指定。
预先感谢您的帮助。
最佳答案
大概意思是GHashTable
在您包含的 header 中未完全定义。也就是说,glib.h
中可能有一行或者它包含的文件之一,内容如下:
typedef struct GHashTable GHashTable;
在不改变我的论点的情况下,结构标签可以不同。一定有类似的东西,否则你会得到关于 GHashTable
的不同信息。未被识别为类型名称:
error: unknown type name 'GHashTable'
<glib.h>
中没有提供有关结构的额外信息;你不需要知道它来使用它。哈希表函数的 API 可能处理 GHashTable *
值,所以你不需要知道里面有什么,就像你不需要知道 FILE *
里面有什么一样能够在您的代码中使用它(虽然像 getchar()
这样的宏化函数可能需要了解 FILE *
的内部结构;也许更好的类比是 DIR *
,但这是一个 POSIX 接口(interface),不一定是众所周知的).
这意味着您将需要使用:
GHashTable *htbls[3];
您可以毫无问题地拥有指向不完整类型的指针数组。
关于c - "array type has incomplete element type"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12648274/