错误:字段'nm_creds'的类型不完整

时间:2017-03-16 17:31:00

标签: c structure header-files

以下结构的正确顺序是什么?它的投掷场有一个不完整的类型错误。

#include <stdlib.h>
struct nl_msg
{   
    int         nm_protocol;
    int         nm_flags;
    struct ucred        nm_creds;
    struct nlmsghdr *   nm_nlh;
    size_t          nm_size;
    int         nm_refcnt;
};

struct nl_msg;
struct nl_tree;
struct ucred;

int main()
{
    return 0;
}

3 个答案:

答案 0 :(得分:3)

在您的代码中(而不是翻译单元。),无法定义struct ucred

您需要定义_GNU_SOURCE MACRO并包含定义此结构的sys/socket.h标头。

See this online

答案 1 :(得分:1)

您的struct包含一个struct ucred类型的字段,该字段尚未在任何地方定义。

您需要提供该类型的定义。

答案 2 :(得分:1)

您的结构nl_msg中的一个字段:

struct ucred        nm_creds;

具有未定义的数据类型;你没有在任何地方定义ucred的结构。您需要在代码中的某处定义结构ucred。这就是你得到错误的原因:

  

字段的类型错误不完整

如果您指的是socket.h文件,则需要将头文件添加到定义此结构的代码中:

#include <sys/socket.h>

编辑:您还需要定义_GNU_SOURCE宏。