无法迭代枚举

时间:2016-08-22 13:51:27

标签: c++ visual-c++ clr

我目前无法使用以下代码迭代我的枚举值:

enum class Animals { Ducks, Giraffes, Hamster };

Array^ temp = Enum::GetValues(Animals::typeid);
Console::WriteLine("LENGTH = " + temp->Length);
for (int iter = 0; iter < temp->Length; iter++)
{
    Console::WriteLine("ITER = " + iter);
}

结果如下:

LENGTH = 0

我已按照以下文档输入:

https://msdn.microsoft.com/en-us/library/system.enum.getvalues(v=vs.110).aspx

感谢您的时间

1 个答案:

答案 0 :(得分:3)

C ++ 11语言版本采用了C ++ / CLI中使用的几个关键字。与nullptroverridefinal一样。以及enum class关键字。这使得您的动物在最近的VS版本中键入非托管类型,而Enum :: GetValues()无法发现枚举值,因为它依赖于反射。

overridefinal不是字节,因为它们是上下文关键字。 nullptr很麻烦,但它保持了托管风味,而__nullptr是非托管风味。 enum class的解决方法不直观,您必须使用顶级类型可见性说明符(公共或私有)声明它。在本机C ++中无效的语法。修正:

   public enum class Animals { Ducks, Giraffes, Hamster };