有一个简单的,没有任何代码的空项目。包含 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_addr
和 in6_addr
不是完整的类型。 因此,您应该在 netfilter.h
之前包含带有结构声明的标头