在java中这是可能的:
enum VisitSetting {
NOT_VISITED,
QUERIED_VISITED,
CONFIRMED_VISITED
}
enum ExcludeSetting {
NONE,
QUERIED_VISITED_AND_CONFIRMED_VISITED,
CONFIRMED_VISITED
}
Run Code Online (Sandbox Code Playgroud)
请注意,CONFIRMED_VISITED也在ExcSetSetting中的VisitSetting中.
我想在目标c中有一些simulair然后我得到了 Redefinition of enumerator 'CONFIRMED_VISITED'
这是实施:
#ifndef RouteApp_IGConstants_h
#define RouteApp_IGConstants_h
typedef enum {
NOT_VISITED = 0,
QUERIED_VISITED,
CONFIRMED_VISITED
} VisitSetting;
typedef enum {
NONE = 0,
QUERIED_VISITED_AND_CONFIRMED_VISITED,
CONFIRMED_VISITED
} ExcludeSetting;
#endif
Run Code Online (Sandbox Code Playgroud)
怎么解决这个问题?我希望不重命名CONFIRMED_VISITED.
rob*_*off 11
在C中,因此在Objective-C中,枚举器位于全局命名空间中.因此,您不能在两个枚举中使用相同的枚举器.您必须CONFIRMED_VISITED在Objective-C中重命名至少一个枚举器.通常,我们为枚举的每个成员使用公共前缀,如下所示:
typedef enum {
VisitSettingNotVisited = 0,
VisitSettingQueried,
VisitSettingConfirmed
} VisitSetting;
typedef enum {
ExcludeSettingNone = 0,
ExcludeSettingQueriedAndConfirmed,
ExcludeSettingConfirmed
} ExcludeSetting;
Run Code Online (Sandbox Code Playgroud)
如果您愿意使用Objective-C++,那么您可以使用enum class.这是一个新的C++特性,在普通的C中没有等价物.
enum class VisitSetting {
NOT_VISITED,
QUERIED_VISITED,
CONFIRMED_VISITED
};
enum class ExcludeSetting {
NONE,
QUERIED_VISITED_AND_CONFIRMED_VISITED,
CONFIRMED_VISITED
};
// Example usage:
VisitSetting vs = VisitSetting::CONFIRMED_VISITED;
ExcludeSetting es = ExcludeSetting::CONFIRMED_VISITED;
Run Code Online (Sandbox Code Playgroud)
Xcode 4.6.2支持此C++ 11功能.旧版本可能支持它; 我不知道.
| 归档时间: |
|
| 查看次数: |
3646 次 |
| 最近记录: |