【问题标题】:expected specifier-qualifier-list before "typedef"“typedef”之前的预期说明符限定符列表
【发布时间】:2014-07-31 10:37:43
【问题描述】:

我有一个不知道如何解决的错误,那就是:

expected specifier-qualifier-list before 'typedef'

在这一行:

typedef caddr_t ipsec_policy_t;

谁能解释一下为什么以及如何解决这个问题?

【问题讨论】:

  • 你是否包含了声明caddr_t的文件?
  • 节点 caddr_t 不是标准类型,在 C 和 POSIX 中都不是。
  • 嗯,这很奇怪,因为当我用“#define ipsec_policy_t char*”替换这个“typedef”定义时(因为我将 caddr_t 初始化为一个 char 指针),然后它就起作用了!现在我有另一个错误,让我认为错误来自更高:我在这里有一个错误:我的头文件中的extern void pfkey_sadump (struct sadb_msg *);,带有相同的错误消息,但消息中带有'extern'而不​​是'typedef'。

标签: c typedef


【解决方案1】:
//A.h
typedef unsigned char uchar;

//B.h
struct B {
    #include "A.h"
   ...
}

我刚才遇到了这个问题。当我从内部结构 B 中移动 include 语句时,它就起作用了。

【讨论】:

    【解决方案2】:

    编译器不知道caddr_t 是一个类型。您可能希望在编译此代码时检查适当的 typedef 是否在范围内。您可能错过了包含适当的头文件。

    【讨论】:

    • 我有一个我不明白的错误:我创建了一个简单的typedef int a;,我的控制台返回了这个错误:error : expected specifier-qualifier-list before 'typedef'。控制台知道int 类型,因为我之前尝试了一个简单的int b 并且控制台没有给我错误!你能帮我吗?
    【解决方案3】:

    编译器似乎不知道caddr_t 是什么。确保在 typedef 之前存在适当的声明或包含。

    【讨论】:

      【解决方案4】:

      这是预期错误。未找到编译器 caddr_t 类型。这是因为它不是标准数据类型。它可能在某个头文件中声明,或者在您忘记包含的地方声明。

      经过一番谷歌搜索,发现了一些与之相关的链接。

      http://lxr.free-electrons.com/ident?i=caddr_t

      What is the significance of caddr_t and when is it used?

      【讨论】:

        【解决方案5】:

        当我用“#define ipsec_policy_t”替换这个“typedef”定义时 char*" (因为我将 caddr_t 初始化为 char 指针),然后它可以工作 !现在我有另一个错误让我认为错误来了 来自更高的

        对!错误的原因在此行之上,因此请先查看源代码或预处理器输出。

        【讨论】:

          猜你喜欢
          • 2011-07-02
          • 2021-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多