【问题标题】:ISO C++ forbids declaration of 'int32' with no typeISO C++ 禁止声明没有类型的“int32”
【发布时间】:2020-12-28 10:47:16
【问题描述】:

尝试构建 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_t
  • 当我尝试从显示的代码中创建 MCVE(Minimal, Complete, Verifiable Example — 或 MRE 或 SO 现在使用的任何名称)或 SSCCE(Short, Self-Contained, Correct Example)时,我无法重现该错误。请创建一个确实重现问题的 MCVE — 但您很可能会在创建 MCVE 时找到解决方案,然后您可以删除此问题。
  • FWIW:我使用的非复制尝试的 MCVE:#include <stdint.h>typedef int32_t int32; struct rpc_loc_client_handle_type { int h; }; struct rpc_loc_event_mask_type { int mask 4 ; }; struct rpc_loc_event_payload_u_type; typedef int32 (loc_event_cb_f_type)( rpc_loc_client_handle_type loc_handle, rpc_loc_event_mask_type loc_event, const rpc_loc_event_payload_u_type *loc_event_payload ); extern loc_event_cb_f_type loc_type; — cmets 中的格式不好。
  • @luserdroog 你知道int32是否只在windows上定义?
  • @JoseMiguelArroyave 对不起,我不知道。如果包含stdint.h,我知道int32_t 是C 中的标准类型。我在 windows 上使用 cygwin 环境,所以我可以假装它是 unix。

标签: c++ c linux build android-source


【解决方案1】:

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

正如@luserdroog 所写,

应该是int32_t吗?

int32_t 和其他 intX_t 类型定义在 /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

【讨论】:

    猜你喜欢
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多