2012-11-26 5 views
9

Ich habe vor kurzem VS2012 installiert. Ein C++ - Projekt (mit .Net 4.0), das unter VS2010 kompiliert wird, erkennt HashSet<T> auf VS2012 nicht. Ich habe sogar versucht explizit mit folgenden Erklärung zu sein:Wo hat HashSet <T> in VS2012 gehen?

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

aber nur Ergebnisse in dem Fehler:

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

Die Dokumentation sagt, dass es in System.Collections.Generic ist. Der C++ - Compiler denkt das nicht.

Irgendwelche Ideen, wohin es ging?

+2

* Ein C++ Projekt (mit .Net 4.0) * Autsch. In ** normal ** C++ gibt es 'unordered_set'. –

+1

Ist dies für C++ - CLI? –

+4

Haben Sie die Assembly 'System.Core' referenziert? Der System :: Collections :: Generic-Namespace existiert in mehreren Assemblys. Diese Fehlermeldung erhalten Sie, wenn Sie auf einen von ihnen verweisen, aber nicht auf den, der HashSet enthält. –

Antwort

14

HashSet <> war eine späte Ergänzung zu .NET und wurde in .NET 3.5 verfügbar. Der Namespace ist älter, mscorlib.dll enthielt Klassen in System :: Collections :: Generic seit .NET 2.0, Klassen wie Stack <> und Queue <>. HashSet <> wurde in einer neuen Assembly für .NET 3.5, System.Core.dll hinzugefügt, sie wollten nicht mit den 2.0-Baugruppen basteln.

Dementsprechend müssen Sie einen Verweis auf System.Core hinzufügen, um die Fehlermeldung zu vermeiden.

Wenden Sie sich immer an die MSDN-Dokumentation, wenn Sie einen Fehler wie diesem erhalten, zeigt es, dass Sie möchten, dass die Referenz zur Baugruppe benötigt wird.

+0

Danke Hans. Es kam mir nicht in den Sinn, dass ich eine neue Referenz hinzufügen müsste, da ich das .NET-Framework, gegen das ich kompilierte, nicht änderte. Jetzt weiß ich. –

+0

Nun, du hast es tatsächlich getan. Sie haben das Ziel von 2.0 auf 3.5 geändert, die einzige Version mit System.Core. Die C++ - IDE ist nicht so ausgeklügelt wie die C# - oder VB.NET-IDEs. Ziemlich typisch für C++ - Werkzeuge, es setzt voraus, dass Sie wissen, was Sie tun. –

+1

Große Antwort, aber um andere neue C++ Leute wie mich zu helfen, sah meine Referenz aus wie es zu beheben: # using Mizmor

Verwandte Themen