c - "array type has incomplete element type"是什么意思?

标签 c hashtable glib gcc4

我有以下简单的代码行:

#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/

相关文章:

windows - cabal 安装 glib 出错

c - C 中根据长度对 vector 进行排序

c - 忽略 while 循环中的第二次运行,C

c++ - 使用基于模板类类型的单独函数

python - 设置弹出(Python)

在 Windows 上检查子进程的退出状态

c - 链接到 gstreamer 库 ubuntu 11.10 的问题

c - 头文件中的函数原型(prototype)与定义不匹配,如何捕获?

lisp - 我是一个 lisp 新手,我需要一个哈希表类。

c - 对 GLib 友好的 MD5 例程?