枚举引用未定义,但位于包含的头文件中

C Enum reference undefined, yet sitting in a included header file?

本文关键字:文件 于包含 引用 未定义 枚举      更新时间:2023-10-16

所以,我在玩GNUTLS,它有这个enum:

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的include方面有这个。如果它是一个编译器没有找到它,为什么它会找到一些值,我如何让它找到它?如果不是,问题是什么?

如何查找?将-I/usr/local/include添加到您的gcc命令行中,或将CFLAGS添加到makefile中,或者查看此处查看如何在eclipse

中添加它。

如果编译器找到了一些值而没有找到包含,可能它们在其他地方定义了。尝试重新定义它们,并在错误中查找另一个定义所在的位置。对于重新定义,您可以声明为不同的类型(如:typedef int whatever;,以查看whatever是否以及在何处声明),因为如果它是相同的类型定义,则可能被视为正向减速。