【发布时间】:2016-04-04 16:38:52
【问题描述】:
我正在尝试使用 enum class 作为键和定义的类作为引用对象来定义 std::unordered_map:
std::unordered_map<Dimension, unit, EnumClassHash> SI_Dim;
SI_Dim[Dimension::MASS] = BaseSIUnits::kilogram;
Dimension 是一个enum class,在单独的头文件中声明为
enum class Dimension{MASS, TIME, LENGTH, TEMPERATURE, CURRENT, QUANTITY, ANGLE, FORCE, ENERGY, POWER,
AREA, VOLUME, NONDIMENSIONAL};
使用EnumClassHash 作为散列函数(如果相关,我可以发布代码)。
BaseSIUnits::kilogram 在上面几行定义为
const unit BaseSIUnits::kilogram = unit(1, "kg", Dimension::MASS);
编译得很好。但是SI_Dim[Dimension::MASS] = BaseSIUnits::kilogram; 行给了我一个错误。在 QtCreator(我的 IDE)中,它说“需要声明”,而 g++ 给出错误“SI_Dim 没有命名类型”。这些对我来说都没有任何意义。此外,当查看 QtCreator 中的行时,Dimension::MASS 或 BaseSIUnits::kilogram 均未突出显示(几乎就像它们未被识别,即使我知道它们是)。我对 std::unordered_map 没有太多经验,所以这可能是我遗漏的一些简单语法错误。但是根据我看过的例子,语法对我来说是正确的。
【问题讨论】:
-
对不起,我想这里的问题还不清楚。我的问题是是否存在明显的语法错误导致代码无法编译。
-
你在函数之外有
SI_Dim[Dimension::MASS] = BaseSIUnits::kilogram;这一行吗?您不能只在命名空间范围内拥有任意代码。 -
我确实在函数之外拥有它。我希望可以从其他文件访问 unordered_map 容器。我该怎么做?
-
一种选择是使用列表初始化 -
std::unordered_map<Dimension, unit, EnumClassHash> SI_Dim{{Dimension::MASS, BaseSIUnits::kilogram}}; -
编译得很好!谢谢!
标签: c++ class c++11 enums unordered-map