6
typedef enum {
    artists = 0,
    artists_songs = 1,
    artist_albums = 2,
    albums = 3,
    album_songs = 4,
    tags = 5,
    tag = 6,
    tag_artists = 7,
    tag_albums = 8,
    tag_songs = 9,
    songs = 10,
    song = 11,
    playlists = 12,
    playlist = 13,
    playlist_songs = 14,
    search_songs = 15
} Methods;

typedef enum {
    artists = 0,
    albums = 1,
    songs = 2,
    tags = 3,
    playlists = 4    
} ReturnTypes;

アーティストが再宣言されたことを示す、ReturnTypes の artist = 0 行でエラーが発生し続けます。これの構文エラーが何であるかわかりません。何か案は?

4

3 に答える 3

15

構文エラーは、artists再宣言されていることです! 最初の列挙型で一度宣言しましたが、2 行目で再度宣言しようとしています。これらの列挙型は別個の型ではありません。それらは単なる定数のリストです。という 2 つの定数を持つことはできませんartists

これが、Cocoa の列挙型にUITableViewCellStyleDefault. お互いにぶつからないようにするためです。同じことを行う必要がありMyMethodsArtistsますMyReturnTypesArtists

于 2013-04-30T16:10:51.880 に答える
0

両方の列挙型に「アーティスト」があります。コンパイラは、それらが同じ値を持っているかどうかを気にせず、エラーをスローします。

2 つのうちの 1 つを再定義してみてください。他のすべての再定義された定数についても同じ問題が発生します。

于 2013-04-30T16:12:42.860 に答える
0

Anenumは、整数定数の単なる構文糖衣です。特定の識別子を複数の場所で定義することはできません。この場合、複数の列挙型で同じ名前を使用しようとしています。
静的メンバーを持つクラスのようなものを試すことができます (大まかな図、テストされたコードではありません):

@implementation MethodsEnum

+(int)artists
{
    return 0;
}

+(int)artists_songs
{
    return 1;
}

// etc.

@end

@implementation ReturnTypeEnum

+(int)artists
{
    return 0;
}

+(int)albums
{
    return 1;
}

// etc.

@end

このアプローチはお勧めしませんが、Java に欠けていると思われる言語機能の一部をエミュレートすることに注意してくださいenum

于 2013-04-30T16:38:36.883 に答える