4

私は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;

(typedefをunsigned longに変更)に変更git_reset_tするNSUIntegerと、コンパイルできるようになりましたが、もちろん、ライブラリファイルを変更する必要はありません。

Objective-gitはそれ自体のプロジェクトで問題なくコンパイルされ、そのプロジェクトと私のプロジェクトのコンパイラ設定に大きな違いは見つかりません。何が欠けている可能性がありますか?

これはXcode4.5であり、Applellvm4.1でコンパイルされます。

更新:私が見逃した手がかりは、エラーが.mmファイルでのみ発生し、.mファイルは問題がなかったため、基になる列挙型がC ++で機能しないことでした(C ++ 11を有効にしても)。回避策として、そのファイルで使用する1つのobjective-gitクラスに偽の最小限の@interface宣言を配置したので、ヘッダーを含める必要はありませんが、よりクリーンな解決策を見つけたいと思います。

4

1 に答える 1

1

Google は、これを含むこのファイルを表示します。

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 )
于 2013-02-27T15:39:40.773 に答える