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

単純なプロジェクトでわかるように、2つのインクルードがあります。iostreamインクルードを削除すると、追加のエラーが発生します-'/usr/include/linux/sysctl.h:40:2:エラー:'size_t'はタイプを指定しません'

#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_addrin6_addr完全なタイプではありません。したがって、前に構造体の宣言を含むヘッダーを含める必要がありますnetfilter.h

于 2012-07-26T08:52:16.573 に答える