Obj-C枚举重定义错误

时间:2013-04-30 16:08:59

标签: objective-c enums

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的artists = 0行收到错误,说艺术家已被重新声明。我不确定这是什么语法错误。有什么想法吗?

3 个答案:

答案 0 :(得分:14)

语法错误是artists正在重新声明!你已经在第一个枚举中声明了一次,现在你试图在第二行再次声明它。这些枚举不是单独的类型;它们只是常量列表。你不能有两个名为artists的常量。

这就是为什么Cocoa中的枚举有着令人讨厌的长期无聊的名字,例如UITableViewCellStyleDefault。这样他们就不会互相冲突。你应该这样做,例如MyMethodsArtistsMyReturnTypesArtists

答案 1 :(得分:0)

你的枚举类型中都有“艺术家”。编译器不关心它们是否具有相同的值,它会引发错误。

尝试重新定义其中一个。所有其他重新定义的常量都会遇到同样的问题。

答案 2 :(得分:0)

enum只是整数常量的语法糖。您不能在多个地方定义给定的标识符;在这种情况下,您尝试在多个枚举中使用相同的名称 您可以尝试使用静态成员的类(粗略插图,未测试代码):

@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中似乎缺少的一些语言功能。