【发布时间】:2013-01-29 13:34:08
【问题描述】:
enum aaa {a, b, c};
std::map <aaa, int> container;
container[0]; //compilation error
我知道在这种情况下容器是空的,我会遇到段错误,但这不是问题。枚举是算术类型,为什么会出现问题?
【问题讨论】:
-
一个简单的演员就可以解决问题
enum aaa {a, b, c};
std::map <aaa, int> container;
container[0]; //compilation error
我知道在这种情况下容器是空的,我会遇到段错误,但这不是问题。枚举是算术类型,为什么会出现问题?
【问题讨论】:
你在这两个方面都错了。 :)
int 不能隐式转换为 enum,需要显式转换,并且不会出现段错误,因为 container[0] 会初始化新值在地图中。
【讨论】:
int 无法转换为该枚举怎么办?如果你说container[42]呢?
容器的键类型是aaa。 0 的类型是 int。 int 不能隐式转换为 aaa,因此会出现编译器错误。
【讨论】:
ints 进行索引,为什么不首先将其设为map<int, int>?
编译器期望密钥为aaa 类型。所以你需要写container[a]而不是你做什么。
【讨论】: