预期的';)';在'之前*';c语言中的令牌错误

预期的';)';在'之前*';c语言中的令牌错误,c,unix,struct,compiler-errors,linux-device-driver,C,Unix,Struct,Compiler Errors,Linux Device Driver,下面是我的.h文件 1 typedef int32_t status_t; 2 typedef u_int16_t pic_id_t; 3 typedef const char* (*pic_flavor_t) (pic_t *); 4 typedef status_t (*pic_periodic_t) (pic_t *); 5 typedef status_t (*pic_get_port_info_t) (pic_t *pic, u_int16_t link,void

下面是我的.h文件

  1 typedef int32_t status_t;
  2 typedef u_int16_t pic_id_t;
  3 typedef const char* (*pic_flavor_t) (pic_t *);
  4 typedef status_t (*pic_periodic_t) (pic_t *);
  5 typedef status_t (*pic_get_port_info_t) (pic_t *pic, u_int16_t link,void  *info,boolean *need_update);
  6 
  7 struct pic_
  8 {
  9     u_int16_t   nic_slot;
  10     u_int16_t   pic_slot;
  11     u_int32_t   pic_flags;
  12     pic_id_t    pic_id;
  13     u_int16_t   pic_asic_type;
  14     u_int16_t   pic_firstport;
  15     pic_periodic_t  pic_periodic;
  16     pic_flavor_t    pic_flavor;
  17     pic_get_port_info_t pic_get_port_info;
  18     void *pic_context;
  19 }pic_t;
  20 
这些就是我所犯的错误

../../../../../src/pfe/common/drivers/rpio/rpio_tunnel_pvt1.h:3: error: expected ')'   before '*' token
../../../../../src/pfe/common/drivers/rpio/rpio_tunnel_pvt1.h:4: error: expected ')' before '*' token
../../../../../src/pfe/common/drivers/rpio/rpio_tunnel_pvt1.h:5: error: expected ')' before '*' token
../../../../../src/pfe/common/drivers/rpio/rpio_tunnel_pvt1.h:15: error: expected specifier-qualifier-list before 'pic_periodic_t'
我正在尝试为我的.c文件创建一个新的.h文件。在这里,我将包括.c文件中所需的一些结构的定义
我无法处理这些错误。

您正在使用
pic\u t
中:

typedef const char*(*pic_flavor_t)(pic_t*)

但在此之后您定义了
pic\t
类型

struct pic_
{
    ...
}pic_t;
因此,
picu t
此时编译器不可用/不知道(在第3行)

要删除错误,请在使用
pic\t
type之前声明此结构

啊!!您还需要
typedef
struct
转换为
picu t
而不是将其作为结构对象


用户3386109的答案中的代码更好地解释了这一点。

以下内容似乎有效

typedef struct pic_ pic_t;
typedef int32_t status_t;
typedef u_int16_t pic_id_t;
typedef const char* (*pic_flavor_t) (pic_t *);
typedef status_t (*pic_periodic_t) (pic_t *);
typedef status_t (*pic_get_port_info_t) (pic_t *pic, u_int16_t link,void  *info, boolean *need_update);

struct pic_
{
    u_int16_t   nic_slot;
    u_int16_t   pic_slot;
    u_int32_t   pic_flags;
    pic_id_t    pic_id;
    u_int16_t   pic_asic_type;
    u_int16_t   pic_firstport;
    pic_periodic_t  pic_periodic;
    pic_flavor_t    pic_flavor;
    pic_get_port_info_t pic_get_port_info;
    void *pic_context;
};

但是如果我在typedef const char*(*pic_flavor_t)(pic_t*)之前定义pic_id_t pic_id;然后它将再次寻找一个定义
pic_id_t
不同于
pic_t
。因此,我应该先编写结构,然后pic_id_t picu idI声明了结构,然后使用pic_t会给我同样的错误!嘿是的,这在大多数情况下都有效,但仍然存在一个错误../../../../../../../../../../../src/pfe/common/drivers/rpio/rpio_tunnel\u pvt1.h:7:错误:预期的声明说明符或“boolean”之前的“…”@user3409272 Use
bool
,内核中没有
boolean
类型。@user3409272然后使用int。虽然bool应该在linux/types.h中header@user3409272我也有这个错误,但假设您在某个地方有一个
boolean
的typedef,因为boolean不是标准类型之一。您可以使用
typedef int boolean修复错误