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;

我一直在返回类型的艺术家 = 0 行上收到错误,说艺术家已被重新声明。我不确定这是什么语法错误。有任何想法吗?

4

3 回答 3

15

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

这就是为什么 Cocoa 中的枚举具有令人讨厌的长而无聊的名称,例如UITableViewCellStyleDefault. 这样他们就不会互相冲突了。你应该做同样的事情,例如MyMethodsArtistsvs. MyReturnTypesArtists

于 2013-04-30T16:10:51.880 回答
0

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

尝试重新定义两者之一。对于所有其他重新定义的常量,您将遇到同样的问题。

于 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 回答