【问题标题】:expected declaration specifiers or '...' before 'boolean''boolean' 之前的预期声明说明符或 '...'
【发布时间】:2014-06-08 03:28:18
【问题描述】:

以下是我的 .h 文件

4 typedef struct pic_ pic_t; 
5 typedef int32_t status_t; 
6 typedef u_int16_t pic_id_t; 
7 typedef const char* (*pic_flavor_t) (pic_t *); 
8 typedef status_t (*pic_periodic_t) (pic_t *); 
9 typedef status_t (*pic_get_port_info_t) (pic_t *pic, u_int16_t link, void*info, Boolean*need_update); 
11 struct pic_ 
12 { 
13 u_int16_t   nic_slot; 
14 u_int16_t   pic_slot; 
15 u_int32_t   pic_flags; 
16 pic_id_t    pic_id; 
17 u_int16_t   pic_asic_type; 
18 u_int16_t   pic_firstport; 
19 pic_periodic_t  pic_periodic; 
20 pic_flavor_t    pic_flavor; 
21 pic_get_port_info_t pic_get_port_info; 
22 void *pic_context; 
23 };

我收到以下错误

../../../../../src/pfe/common/drivers/rpio/rpio_tunnel_pvt1.h:9: error: expected     declaration specifiers or '...' before 'boolean'

我尝试过包括 还尝试用 bool 和 _bool 替换 booleand 仍然没有帮助。 有人请在这里帮助我

【问题讨论】:

  • 您在 9 处缺少右括号和 ;,这是复制粘贴问题吗?
  • C++ 还是 C?请选一个。我强烈怀疑 C++ 在标记为“linux 内核”的问题中是多余的。
  • #include <stdbool.h>吗?
  • 贴出的代码Boolean和错误信息boolean不匹配。
  • 我更正了我的代码,它是“布尔”OlafDietsche 是的,我做了 '#include " @KlasLindbäck 它是 C jrok SingerOfTheFall,您能否指出缺少括号的位置?

标签: c++ c unix kernel linux-device-driver


【解决方案1】:

编译器不知道Boolean 表示什么名称。在引用Boolean之前,您需要在此标头中包含定义此名称的标头

【讨论】:

  • @user3409272 在 C++ 中没有像 boolean 这样的关键字作为类型说明符。使用 bool 代替。或者如果它是一个 C 程序,那么 _Bool 或简单的 int。
【解决方案2】:

Booleanboolean 都不存在于 Linux 内核头文件中的任何位置。

但是,boollinux/types.h 中定义为

typedef _Bool           bool;

要访问它,您必须将 boolean 更改为 bool 并在您的源中包含 linux/types.h

【讨论】:

  • 标准包含文件是<stdbool.h>。直接包含linux/types.h 会使代码更难移植到非Linux 平台。
  • 该问题被标记为kernellinux-device-driver,因此通常的标准C 包括在这里不适用。
猜你喜欢
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 2013-11-19
相关资源
最近更新 更多