Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何给出枚举值的索引并获取它?_C++ - Fatal编程技术网

C++ 如何给出枚举值的索引并获取它?

C++ 如何给出枚举值的索引并获取它?,c++,C++,我有这个枚举: enum Status { CONTINUE, WON, LOST }; 我想给出其中一个值的索引(例如1表示赢),然后得到值(赢)。 我搜索了一下,但我找到了相反的方法!!! 我发现这段代码可以执行,但它再次为我提供了索引: int main() { enum Status { CONTINUE, WON, LOST }; int myInteger = 1; Status myValue = (Status)myInteger; cout << myValue

我有这个枚举:

enum Status { CONTINUE, WON, LOST };
我想给出其中一个值的索引(例如1表示赢),然后得到值(赢)。 我搜索了一下,但我找到了相反的方法!!! 我发现这段代码可以执行,但它再次为我提供了索引:

int main()
{
enum Status { CONTINUE, WON, LOST };
int myInteger = 1;
Status myValue = (Status)myInteger;
cout << myValue <<endl;//it rerurns 1 !!!
system("PAUSE");
}
intmain()
{
枚举状态{继续,赢得,丢失};
int myInteger=1;
状态myValue=(状态)myInteger;
coutC++“继承”了C中的
enum
。它实际上只不过是C中传统操作方式的简写符号,您的
enum
应该是这样的:

#define CONTINUE 0
#define WON 1
#define LOST 2
enum
自动为符号分配连续数字,但仅此而已

C++11添加了
enum类
,该类创建了一个更像普通类型的枚举,但它仍然没有提供一种(自动)从数字表示转换为所用符号的方法。

C++“继承”C中的
enum
。它实际上只不过是C中处理事情的传统方法的简写符号,其中您的
enum
应该是:

#define CONTINUE 0
#define WON 1
#define LOST 2
enum
自动为符号分配连续数字,但仅此而已


C++11添加了
enum类
,该类创建了一个更像普通类型的枚举,但它仍然没有提供一种(自动)从数字表示转换为所用符号的方法。

您可以使用STL中的
map

对于Instance:

#include <iostream>
#include <map>
#include <string> 


using namespace std;

int main()
{

    typedef enum { CONTINUE, WON, LOST } status_t;

    map<int, string> Status = {
        {CONTINUE, "CONTINUE"},
        {WON, "WON"},
        {LOST, "LOST"}
    };


    cout << Status[1] << endl;    
    // It's also possible
    cout << Status[CONTINUE] << endl;    



    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
typedef枚举{继续,赢得,丢失}状态\u t;
地图状态={
{继续,“继续”},
{WON,“WON”},
{迷失,“迷失”}
};

cout您可以使用STL中的
map

对于Instance:

#include <iostream>
#include <map>
#include <string> 


using namespace std;

int main()
{

    typedef enum { CONTINUE, WON, LOST } status_t;

    map<int, string> Status = {
        {CONTINUE, "CONTINUE"},
        {WON, "WON"},
        {LOST, "LOST"}
    };


    cout << Status[1] << endl;    
    // It's also possible
    cout << Status[CONTINUE] << endl;    



    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
typedef枚举{继续,赢得,丢失}状态\u t;
地图状态={
{继续,“继续”},
{WON,“WON”},
{迷失,“迷失”}
};

cout
enum
type只保存值而不是名称

也许你可以这样编码

enum Status { CONTINUE, WON, LOST };
const char* status_names[] = {"CONTINUE", "WON", "LOST"};
int myInteger = 1;
cout << status_names[myInteger] << endl; 
enum状态{继续,赢得,丢失};
const char*status_names[]={“CONTINUE”、“WON”、“LOST”};
int myInteger=1;

cout
enum
type只保存值而不是名称

也许你可以这样编码

enum Status { CONTINUE, WON, LOST };
const char* status_names[] = {"CONTINUE", "WON", "LOST"};
int myInteger = 1;
cout << status_names[myInteger] << endl; 
enum状态{继续,赢得,丢失};
const char*status_names[]={“CONTINUE”、“WON”、“LOST”};
int myInteger=1;

cout enum将打印它们的数值,而不是您给它们的名称。如果没有if/case,就无法继续/赢得/丢失???听起来您只需要一个
std::vector
就可以使用
v[myInteger]访问索引
并获取一个字符串。不,这是一个大学项目,应该由enum完成!!!因此我认为有一种方法可以在enum中提供/获取IndexValue!!因此如果没有,我无法理解enum的用法?!enum用于从有限的范围内选择有意义的名称。无论如何,有可能,尽管很难看,主要是自动从v开始value to string和back with Boost.Preprocessor.enums将打印它们的数值,而不是您给它们的名称。如果没有if/case,就无法获得CONTINUE/win/LOST???听起来您只需要一个
std::vector
就可以使用
v[myInteger]访问索引
并获取一个字符串。不,这是一个大学项目,应该由enum完成!!!因此我认为有一种方法可以在enum中提供/获取IndexValue!!因此如果没有,我无法理解enum的用法?!enum用于从有限的范围内选择有意义的名称。无论如何,有可能,尽管很难看,主要是自动从v开始使用Boost.Preprocessor将value转换为字符串并返回。因此,最后我们应该使用其他东西来获得名称:D,但使用它是一个好主意!(Y)因此,最后我们应该使用其他东西来获得名称:D,但使用它是一个好主意!(Y)