加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 枚举的非整数底层类型

发布时间:2020-12-16 07:03:36 所属栏目:百科 来源:网络整理
导读:我正在努力将objective-git集成到我的项目中,但是当我在我的源代码中包含它们的标题时,我在它们的几个枚举声明中得到了这些错误: objective-git/Classes/GTRepository.h:57:16: Non-integral type 'git_reset_t' is an invalid underlying type 这是有问题
我正在努力将objective-git集成到我的项目中,但是当我在我的源代码中包含它们的标题时,我在它们的几个枚举声明中得到了这些错误:

objective-git/Classes/GTRepository.h:57:16: Non-integral type 'git_reset_t' is an invalid underlying type

这是有问题的代码:

typedef enum : git_reset_t {
    GTRepositoryResetTypeSoft = GIT_RESET_SOFT,GTRepositoryResetTypeMixed = GIT_RESET_MIXED,GTRepositoryResetTypeHard = GIT_RESET_HARD
} GTRepositoryResetType;

我将git_reset_t更改为NSUInteger(typedef’d为unsigned long),并将其编译,但当然我不必更改库文件.

Objective-git在自己的项目中编译得很好,我找不到该项目和我的项目之间的编译器设置有任何显着差异.我能错过什么?

这是使用Xcode 4.5,使用Apple llvm 4.1进行编译.

更新:我错过的线索是错误只发生在.mm文件上,.m文件很好,所以底层的枚举类型在C中不起作用(即使我启用了C 11).作为一种解决方法,我为我在该文件中使用的一个objective-git类添加了一个假的最小@interface声明,因此我不必包含标题,但我仍然希望找到一个更清晰的解决方案.

解决方法

谷歌出现 this file包含:

typedef enum {
    GIT_RESET_SOFT  = 1,/** Move the head to the given commit */
    GIT_RESET_MIXED = 2,/** SOFT plus reset index to the commit */
    GIT_RESET_HARD  = 3,/** MIXED plus changes in working tree discarded */
} git_reset_t;

这是一种旧式枚举,其中int是底层类型.但它不是一个int,它是一个独特的类型.它不是完整的,它不能成为新式枚举的基础类型.

修复是使用typedef enum:int或者如果你可以使用C并希望是额外的说明文件,

typedef enum : std::underlying_type< git_reset_t >::type

我没试过,但你也可以在没有C的ObjC中试试这个:

typedef enum : __underlying_type( git_reset_t )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读