我正在努力将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更改为unsigned long),并将其编译,但当然我不必更改库文件。
Objective-git在自己的项目中编译得很好,我在该项目和我的项目之间的编译器设置中找不到任何显着差异。我能错过什么?
这是使用Xcode 4.5,使用Apple llvm 4.1进行编译。
更新:我错过的线索是错误只发生在.mm文件上,.m文件很好,所以底层的枚举类型在C ++中不起作用(即使我启用C ++ 11)。作为一种解决方法,我为我在该文件中使用的一个objective-git类添加了一个假的最小@interface声明,因此我不必包含标题,但我仍然希望找到一个更清晰的解决方案。
答案 0 :(得分:1)
Google出现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 )