【发布时间】:2013-02-27 15:31:28
【问题描述】:
我正在努力将 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 声明,因此我不必包含标题,但我仍然想找到一个更简洁的解决方案。
【问题讨论】:
-
请注意,这依赖于 Clang + ObjC 特定的扩展:clang.llvm.org/docs/…
标签: objective-c c clang