从文件中读取时如何使用枚举

时间:2015-12-21 20:44:03

标签: c++ file enums

我是c ++的初学者,我需要制作一些需要从文件中读取的汽车相关类。其中一个我想使用枚举 我的班级看起来像这样:

enum engines{ gasoline, hybrid, diesel };

class Automobil
    {
    const int id;
    char *model;
    engines engine;
    int max_speed;
    int engine_cc;
    float avg_consumption_urban;
    float avg_consumption;
    float avg_speed_urban;
    float avg_speed;
}

我需要重载>>运算符从文件中读取对象但是当我为引擎执行时,我有错误。我如何保持枚举并从文件中读取?

friend ifstream& operator>>(ifstream& input, Automobil &a)
{
    delete[] a.model;
    input >> a.model;
    input >>a.engine; //error here
    input >> a.max_speed;
    input >> a.engine_cc;
    input >> a.avg_consumption_urban;
    input >> a.avg_speed_urban;
    input >> a.avg_consumption;
    input >> a.avg_speed;
    return input;

}

1 个答案:

答案 0 :(得分:2)

在枚举中没有重载形式的operator>>

您有两种选择:

  1. 读入枚举名称并转换为枚举类。
  2. 读入枚举值(数字)并转换为枚举类。
  3. 我更喜欢使用名称方法。将名称作为字符串读入,并在[name,enum]表中查找以进行转换。

    编辑1:实施

    std::map<std::string, enum engines> conversion_table;
    // Initialization
    conversion_table["gasoline"] = engines::gasoline;
    conversion_table["hybrid"]   = engines::hybrid;
    conversion_table["electric"] = engines::electric;
    

    注意:您可能需要从值中删除engines::

    将文本转换为枚举:

    engines engine_type = conversion_table[text];