C 枚举引用未定义,但位于包含的头文件中?
C Enum reference undefined, yet sitting in a included header file?
所以,我正在玩 GNUTLS,它有这个枚举:
typedef enum {
GNUTLS_PK_UNKNOWN = 0,
GNUTLS_PK_RSA = 1,
GNUTLS_PK_DSA = 2,
GNUTLS_PK_DH = 3,
GNUTLS_PK_EC = 4
} gnutls_pk_algorithm_t;
位于它的主头文件中(gnutls.h,版本 3.3.17)。我在这里引用它:
unsigned int bits = gnutls_sec_param_to_pk_bits(GNUTLS_PK_DH, GNUTLS_SEC_PARAM_LEGACY);
(就在例子之外)。我确实有 #include <gnutls/gnutls.h>
,而且似乎所有引用都很好(其他枚举都很好,除了 GNUTLS_X509_FMT_PEM
)。我读了一些关于编译器没有看到 gnutls.h 的内容,它在 /usr/local/include
而不是 /usr/include
中,但是我在 Eclipse 的 Includes 方面确实有它。如果它是编译器未找到它,为什么它会找到一些值,我如何让它找到它?如果不是,是什么问题?
怎么找?添加 -I/usr/local/include
到您的 gcc 命令行,或在 makefile 中添加 CFLAGS,或者查看 here for how to add it in eclipse
如果编译器找到了一些值但没有找到包含,可能是它们在别处定义了。尝试重新定义它们,并查看其他定义所在的错误。
要重新定义,您可以声明为不同的类型,(例如:typedef int whatever;
,查看是否声明 whatever
以及在何处声明),因为如果它是相同的类型定义,则它可能被视为向前减速。
所以,我正在玩 GNUTLS,它有这个枚举:
typedef enum {
GNUTLS_PK_UNKNOWN = 0,
GNUTLS_PK_RSA = 1,
GNUTLS_PK_DSA = 2,
GNUTLS_PK_DH = 3,
GNUTLS_PK_EC = 4
} gnutls_pk_algorithm_t;
位于它的主头文件中(gnutls.h,版本 3.3.17)。我在这里引用它:
unsigned int bits = gnutls_sec_param_to_pk_bits(GNUTLS_PK_DH, GNUTLS_SEC_PARAM_LEGACY);
(就在例子之外)。我确实有 #include <gnutls/gnutls.h>
,而且似乎所有引用都很好(其他枚举都很好,除了 GNUTLS_X509_FMT_PEM
)。我读了一些关于编译器没有看到 gnutls.h 的内容,它在 /usr/local/include
而不是 /usr/include
中,但是我在 Eclipse 的 Includes 方面确实有它。如果它是编译器未找到它,为什么它会找到一些值,我如何让它找到它?如果不是,是什么问题?
怎么找?添加 -I/usr/local/include
到您的 gcc 命令行,或在 makefile 中添加 CFLAGS,或者查看 here for how to add it in eclipse
如果编译器找到了一些值但没有找到包含,可能是它们在别处定义了。尝试重新定义它们,并查看其他定义所在的错误。
要重新定义,您可以声明为不同的类型,(例如:typedef int whatever;
,查看是否声明 whatever
以及在何处声明),因为如果它是相同的类型定义,则它可能被视为向前减速。