2

拥有没有任何代码的简单、空项目。只包括。include linux/netfilter.h 导致编译错误:

In file included from ../src/main.cpp:2:0:
/usr/include/linux/netfilter.h:65:17: error: field ‘in’ has incomplete type
/usr/include/linux/netfilter.h:66:18: error: field ‘in6’ has incomplete type

正如您在简单项目中看到的那样,如果我删除 iostream 包含,我将得到 2 个包含,我将得到额外的错误 - '/usr/include/linux/sysctl.h:40:2: error: 'size_t' does not name a type '

#include <iostream>
#include <linux/netfilter.h>

int main() {
}

如果我在 netfilter.h 之前添加 netinet/in.h 的包含而不是没有错误。

为什么我的简单主程序不能有这些编译错误?

谢谢

4

2 回答 2

5

尝试包括netinet/in.h之前linux/netfilter.h

#include <iostream>
#include <netinet/in.h>
#include <linux/netfilter.h>
于 2012-07-26T08:52:30.963 回答
1
union nf_inet_addr {
    __u32       all[4];
    __be32      ip;
    __be32      ip6[4];
    struct in_addr  in;
    struct in6_addr in6;
};

struct in_addr并且in6_addr不是完整的类型。因此,您应该在之前包含带有结构声明的标题netfilter.h

于 2012-07-26T08:52:16.573 回答