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

When add include netfilter.h i got error that fields 'in','in6' has incomplete type

本文关键字:in6 in 类型 字段 netfilter 包括 添加 错误      更新时间:2023-10-16

有一个简单的,没有任何代码的空项目。包含 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包含,我将收到其他错误 - '/usr/include/linux/sysctl.h:40:2:错误:"size_t"没有命名类型'

#include <iostream>
#include <linux/netfilter.h>
int main() {
}

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

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

谢谢

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

#include <iostream>
#include <netinet/in.h>
#include <linux/netfilter.h>
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 之前包含带有结构声明的标头