【问题标题】:Field parent has incomplete type字段父级的类型不完整
【发布时间】:2013-12-18 10:49:00
【问题描述】:

我是 C 新手,无法编译该程序。这是代码的相关部分:

typedef struct {
    git_odb_backend parent;

    redisContext *db;
} hiredis_backend;

编译出错:

error: field 'parent' has incomplete type

这是完整的文件:https://github.com/libgit2/libgit2-backends/blob/master/redis/hiredis.c

类似问题的其他答案提到了头文件。是否也应该有一个hiredis.h 文件?

编辑 git_odb_backend 在这里定义:https://github.com/libgit2/libgit2/blob/development/include/git2/sys/odb_backend.h

【问题讨论】:

  • git_odb_backend的定义是什么?如果不是typedefed,则可能需要在git_odb_backend parent; 前面添加关键字struct
  • 刚刚编辑了问题以添加它。
  • 其实刚刚意识到我正在编译的库是基于一个过时版本的libgit2。提交包含更新的拉取请求。

标签: c


【解决方案1】:

我对@9​​87654321@ 是什么一无所知(编译器也不知道)所以这是我的建议。

文件hiredis.c 需要知道git_odb_backend 的完整声明,才能将其声明为非指针成员变量。这是因为编译器需要了解git_odb_backend 的相关信息,例如:它的大小是多少?我该如何构建它?它不需要知道函数实现,只需要知道结构是什么样的。

所以你需要找到声明git_odb_backed的头文件并将其包含在 hiredis.c

或者,前向声明它并获取一个指针:

typedef struct git_odb_backend git_odb_backend;

typedef struct {
    git_odb_backend*parent;
    redisContext *db;
} hiredis_backend;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多