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行收到错误,说艺术家已被重新声明。我不确定这是什么语法错误。有什么想法吗?
答案 0 :(得分:14)
语法错误是artists
正在重新声明!你已经在第一个枚举中声明了一次,现在你试图在第二行再次声明它。这些枚举不是单独的类型;它们只是常量列表。你不能有两个名为artists
的常量。
这就是为什么Cocoa中的枚举有着令人讨厌的长期无聊的名字,例如UITableViewCellStyleDefault
。这样他们就不会互相冲突。你应该这样做,例如MyMethodsArtists
与MyReturnTypesArtists
。
答案 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
中似乎缺少的一些语言功能。