ISO C ++禁止声明无类型的'int32'

问题描述

尝试构建AOSP版本并出现此错误

错误:ISO C ++禁止无类型的声明'int32'

错误:初始化了typedef'int32'(改用decltype)

错误:未在此范围内声明“ loc_event_cb_f_type”

这是引发错误的声明

typedef int32 (loc_event_cb_f_type)(
    rpc_loc_client_handle_type            loc_handle,/* handle of the client */
    rpc_loc_event_mask_type               loc_event,/* event mask           */
    const rpc_loc_event_payload_u_type*   loc_event_payload       /* payload              */
);

这是完整的文件:/libloc_api-rpc/rpc_inc/loc_api_rpc_glue.h

#ifndef LOC_API_RPC_gluE_H
#define LOC_API_RPC_gluE_H

/* Include RPC headers */
#include "rpc_inc/loc_api_common.h"
#include "rpc_inc/loc_api.h"
#include "rpc_inc/loc_api_cb.h"
#include "rpc_inc/loc_api_fixup.h"

#ifdef __cplusplus
extern "C"
{
#endif

/* Boolean */
/* Other data types in comdef.h are defined in rpc stubs,so fix it here */
typedef unsigned char boolean;
#define TRUE 1
#define FALSE 0

extern int loc_api_glue_init(void);
extern int loc_api_null(void);

typedef int32 (loc_event_cb_f_type)(
      rpc_loc_client_handle_type            loc_handle,/* handle of the client */
      rpc_loc_event_mask_type               loc_event,/* event mask           */
      const rpc_loc_event_payload_u_type*   loc_event_payload       /* payload              */
);

extern rpc_loc_client_handle_type loc_open(
      rpc_loc_event_mask_type       event_reg_mask,loc_event_cb_f_type* event_callback
);

extern int32 loc_close
(
      rpc_loc_client_handle_type handle
);

extern int32 loc_start_fix
(
      rpc_loc_client_handle_type handle
);

extern int32 loc_stop_fix
(
      rpc_loc_client_handle_type handle
);

extern int32 loc_ioctl
(
      rpc_loc_client_handle_type           handle,rpc_loc_ioctl_e_type                 ioctl_type,rpc_loc_ioctl_data_u_type*           ioctl_data
);

#ifdef __cplusplus
}
#endif

#endif /* LOC_API_RPC_gluE_H */

你有什么主意吗?

解决方法

问题是int32没有在任何地方定义或包含

@luserdroog写道,

应该是int32_t吗?

int32_t和其他intX_t typedef是在/usr/include/stdint.h中定义的,因此可以通过将所有int32替换为int32_t来解决,也可以按照@JonathanLeffler的建议定义int32类型来解决,这更加方便和简洁。

typedef uint32_t uint32;

但要解决其他文件的问题,

将此声明添加到/usr/include/stdint.h将起作用

#ifndef __uint8_defined
typedef uint8_t uint8;
# define __uint8_defined
#endif

#ifndef __int8_defined
typedef int8_t int8;
# define __int8_defined
#endif

#ifndef __uint16_defined
typedef uint16_t uint16;
# define __uint16_defined
#endif

#ifndef __int16_defined
typedef int16_t int16;
# define __int16_defined
#endif

#ifndef __uint32_defined
typedef uint32_t uint32;
# define __uint32_defined
#endif

#ifndef __int32_defined
typedef int32_t int32;
# define __int32_defined
#endif

#ifndef __uint64_defined
typedef uint64_t uint64;
# define __uint64_defined
#endif

#ifndef __int64_defined
typedef int64_t int64;
# define __int64_defined
#endif