【问题标题】:C Enum reference undefined, yet sitting in a included header file?C枚举引用未定义,但位于包含的头文件中?
【发布时间】:2015-08-12 07:05:10
【问题描述】:

所以,我正在使用 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 方面确实有它。如果它是编译器找不到它,为什么它会找到一些值,我如何让它找到它?如果不是,那是什么问题?

【问题讨论】:

  • @avaProphet 我在您显示的枚举中没有看到该枚举器 GNUTLS_X509_FMT_PEM 的定义。
  • @VladfromMoscow 它在另一个枚举中,我应该添加它吗?
  • @avaProphet 如果枚举是在同一个头文件中定义的,那么编译器应该会看到它们。
  • @VladfromMoscow 我手动进行了 GCC,但没有输出问题。我快速搜索了一下,发现stackoverflow.com/questions/11866873/… 解决了这个问题。随意将其发布为解决方案。

标签: c++ c eclipse enums gnutls


【解决方案1】:

如何找到?将-I/usr/local/include 添加到您的gcc 命令行,或在makefile 中添加CFLAGS,或查看here for how to add it in eclipse

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2011-06-05
    • 2015-05-05
    • 2014-11-26
    • 1970-01-01
    • 2012-02-02
    相关资源
    最近更新 更多