enum Person {Person1Name, Person2Name, Person3Name};
struct MyInfo
{
Person person ;
}
让这个人输入他的名字" John"和我 infile>> (我应该在这里写什么来读取他的名字的用户类型并与枚举Person2Name相关联);
答案 0 :(得分:0)
很难真正理解你的需要,但是读取字符串并将它们转换为枚举值可以通过显式ifs来完成
std::map<std::string, Person> map;
map["John"] = Person2Name;
in >> name;
info.person = map[name]; // UGLY! not checking if name is in map (use std::map::find in real code)
或一些地图
{{1}}
将所有可用名称硬编码为代码中的枚举仍然很奇怪。
答案 1 :(得分:0)
在C ++中,枚举只能隐式转换为writeObject
类型;将int
或const char*
类型与&#34; John&#34;相关联是没有意义的。此外,枚举类型应该表示预定义值的集合,而不是运行时值,如下所示:
std::string
或使用C ++ 11:
enum Colors { BLUE, RED, GREEN };
你的类应该持有一个std :: string类型变量来存储从文件中读取的名称,因为它更直观地使名称成为std :: string类型而不是预定义的值。
如果我们可以假设您的文件如此:
enum class Colors { BLUE, RED, GREEN };
你可以写这样的代码:
John
Mary
Joseph
Karen