Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++_Enums - Fatal编程技术网

C++ 如何获取枚举的下一个值

C++ 如何获取枚举的下一个值,c++,enums,C++,Enums,我有以下问题: enum Language { English, French, German, Italian, Spanish }; int main() { Language tongue = German; tongue = static_cast<Language>(tongue + 1); cout << tongue; } enum语言{英语、法语、德语、意大利语、西班

我有以下问题:

    enum Language { English, French, German, Italian, Spanish };

    int main() {

    Language tongue = German;
    tongue = static_cast<Language>(tongue + 1);

      cout << tongue;                  

}
enum语言{英语、法语、德语、意大利语、西班牙语};
int main(){
语言=德语;
舌片=静态施法(舌片+1);

CUT

在C++中为给定的枚举值打印枚举名称不是那么简单。相反,可以使用MAP或字符串数组来保存值,这允许您获得索引和字符串值。

< P>您必须创建一个字符串,与EnUM匹配,例如

std::string[] LangTxt = { "English", "French", "German", "Italian", "Spanish" };
然后您可以按如下方式引用它们:

cout << LangTxt[tongue];

cout使用枚举的最佳方法是首先为枚举指定初始值。
测试枚举
{
零=0,
一,,
两个
}
即使您不指定任何内容,默认起始索引也为零。
要获取特定索引的值,只需执行以下操作

TestEnum(index);

我发现显式查找表最适用于从枚举转换为文本和从文本转换为枚举:

enum Language_Enum
{
    LANGUAGE_FIRST = 0,
    LANGUAGE_GERMAN = LANGUAGE_FIRST,
    LANGUAGE_ENGLISH,
    LANGUAGE_HOPI,
    LANGUAGE_WELSH,
    LANGUAGE_TEXAN,
    LANGUAGE_DUTCH,
    LANGUAGE_LAST
};

struct Language_Entry
{
    Language_Enum   id;
    const char *    text;
};

const Language Entry  language_table[] =
{
    {LANGUAGE_GERMAN, "German"},
    {LANGUAGE_HOPI, "Hopi"},
    {LANGUAGE_DUTCH, "Dutch"},
    // ...
};
const unsigned int language_table_size =
    sizeof(language_table) / sizeof(language_table[0]);
在文本中指定
enum
,允许更改枚举顺序,对搜索引擎的影响最小

LANGUAGE\u FIRST
LANGUAGE\u LAST
标识符允许枚举的迭代:

Language_Enum l;
for (l = LANGUAGE_FIRST; l < LANGUAGE_LAST; ++l)
{
    // ...
}
Language_Enum l;
for(l=第一语言;l
如果要使用索引,为什么不使用
std::array
std::vector
?如果希望索引有意义(而不仅仅是连续整数)“代码> STD::MAP< /COD>是一个很好的候选对象。你能为我编代码吗?因为我不熟悉C++,所以如果我提供前一个,那么想得到下一个EnUM值。我一直想知道为什么第一个帖子总是起到投票的作用,尽管后面的几乎是相似的。”TuxUDay:因为这个原因?有可能得到索引值吗?通过提供枚举名或副枚举名versa@GhazanfarAli,您可以使用带有迭代器或地址的
std::distance
来完成此操作,但在这种情况下,使用索引哨兵将更容易像普通数组一样循环。此行的输出将是什么;coutBut您所能输出的仍然是使用枚举的索引。