我是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;
}
答案 0 :(得分:2)
在枚举中没有重载形式的operator>>
。
您有两种选择:
我更喜欢使用名称方法。将名称作为字符串读入,并在[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];