当添加包含netfilter.h时,我收到错误,字段'in','in6'的类型不完整

时间:2012-07-26 08:43:14

标签: c++ linux linux-kernel

没有任何代码就有简单的空项目。只是包括。 包含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

正如你在简单项目中看到的,我有2个包括如果我删除iostream包含我将得到额外的错误 - '/usr/include/linux/sysctl.h:40:2:错误:'size_t'不会将类型命名为“

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

int main() {
}

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

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

谢谢

2 个答案:

答案 0 :(得分:5)

尝试在netinet/in.h之前加入linux/netfilter.h

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

答案 1 :(得分:1)

union nf_inet_addr {
    __u32       all[4];
    __be32      ip;
    __be32      ip6[4];
    struct in_addr  in;
    struct in6_addr in6;
};

struct in_addrin6_addr不是完整类型。所以,你应该在netfilter.h

之前加入包含结构声明的标题