【问题标题】:Where did HashSet<T> go in VS2012?HashSet<T> 在 VS2012 中去了哪里?
【发布时间】:2012-11-26 18:56:07
【问题描述】:

我最近安装了 VS2012。在 VS2010 下编译良好的 C++ 项目(使用 .Net 4.0)在 VS2012 上无法识别 HashSet&lt;T&gt;。我什至尝试过明确以下声明:

System::Collections::Generic::HashSet< String^ >^ _reasons;

但这只会导致错误:

error C2039: 'HashSet' : is not a member of 'System::Collections::Generic

文档说它在 System.Collections.Generic 中。 C++ 编译器不这么认为。

关于它的去向有什么想法吗?

【问题讨论】:

  • 一个 C++ 项目(使用 .Net 4.0) 哎呀。在普通 C++中,有unordered_set。
  • 您是否引用了程序集System.Core? System::Collections::Generic 命名空间存在于多个程序集中,如果您引用其中一个,而不是包含 HashSet 的那个,则会收到该错误消息。
  • 明确添加 System.Core 作为参考。那解决了它。谢谢大卫!

标签: c++-cli visual-studio-2012 hashset


【解决方案1】:

HashSet 是 .NET 的后期添加,它在 .NET 3.5 中可用。命名空间较旧,自 .NET 2.0 起,mscorlib.dll 包含 System::Collections::Generic 中的类,Stack 和 Queue 等类。 HashSet 已添加到 .NET 3.5 的 新 程序集 System.Core.dll 中,他们不想修改 2.0 程序集。

因此,您必须添加对 System.Core 的引用以避免错误消息。

当您遇到这样的错误时,请务必参考 MSDN 文档,它表明您需要程序集参考。

【讨论】:

  • 谢谢汉斯。我没有想到我需要添加新的引用,因为我没有更改我正在编译的 .Net 框架。现在我知道了。
  • 嗯,你确实做到了。您将目标从 2.0 更改为 3.5,这是唯一具有 System.Core 的版本。 C++ IDE 并不像 C# 或 VB.NET IDE 那样复杂。 C++ 工具非常典型,它假设您知道自己在做什么。
  • 很好的答案,但是为了帮助像我这样的其他 C++ 新人,我的参考资料看起来像修复它:#using
猜你喜欢
  • 2014-02-02
  • 1970-01-01
  • 2015-11-17
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
相关资源
最近更新 更多