【问题标题】:Unable to iterate over enum无法遍历枚举
【发布时间】:2016-08-22 13:51:26
【问题描述】:

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

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

感谢您的宝贵时间

【问题讨论】:

  • 请参阅here 如何进行新的范围样式枚举。

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


【解决方案1】:

C++11 语言修订版采用了 C++/CLI 中使用的几个关键字。喜欢nullptroverridefinal。还有enum class 关键字。这使您的 Animals 类型在最近的 VS 版本中成为 unmanaged 类型,并且 Enum::GetValues() 无法发现枚举值,因为它依赖于反射。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-12
    • 2011-09-01
    • 2015-08-13
    • 2016-06-08
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多