Brauche Hilfe: key->value Konstrukt für CLI managed type.

zu1u

Mitglied
Hallo zusammen,
kann mir jemand sagen wie ich so etwas in der Art hinbekommen kann?
Gibt es eine andere Map die ich für sowas verwenden kann?
Mit std::map habe ich es mal versucht, damit geht es aber nicht
Die Map soll eine globale Variable sein.

Code:
#include <map> 
 
using namespace std; 
 
public ref class MyClass { 
 
public: 
    MyClass::MyClass() {     
    } 
}; 
 
map<jobject, MyClass^> myMap;
error C3265: cannot declare a managed 'second' in an unmanaged 'std::pair<_Ty1,_Ty2>'
 
Dictionary hab ich schon versucht. Damit bekomm ich leider einen anderen Fehler

: error C3225: generic type argument for 'TKey' cannot be 'jobject', it must be a value type or a handle to a reference type
see reference to class generic instantiation 'System::Collections::Generic::Dictionary<TKey,TValue>' being compiled
1> with
1> [
1> TKey=jobject,
1> TValue=Listener ^
1> ] ..............
 
ok ich hab mich jetzt dazu entschieden es mit System::String als Key zu versuchen....

kann mir jemand vieleicht sagen warum ich
Code:
Dictionary<String^,String^> dict= gcnew Dictionary<String^,String^>(); 
		dict.add("test", "asdf);

die Meldung
error C2039: 'add' : is not a member of 'System::Collections::Generic::Dictionary<TKey,TValue>'

bekomme obwohl das doch laut msdn so sein müsste?
 
Hallo zu1u,

also den Fehler kann ich nicht nachvollziehen. Mit welcher Version des Visual Studio arbeitest du denn? Funktioniert denn diese Schreibweise:
C++:
dict["test"] =  "asdf";

Gruß
MCoder
 
ok ich hab mich jetzt dazu entschieden es mit System::String als Key zu versuchen....

kann mir jemand vieleicht sagen warum ich
Code:
Dictionary<String^,String^> dict= gcnew Dictionary<String^,String^>(); 
		dict.add("test", "asdf);
Erstmal solltest du einen Fehler bekommen, da gcnew einen verwalteten Zeiger zurückgibt.

Dann heißt die Methode Add und nicht add.

Gruß
 
jo großes A... , wie lang man wegen sowas sucht :rolleyes:
naja damit hats jetzt eigentlich geklappt.
danke nochmal
 
Interessanterweise bringt der Compiler aber keinen Fehler, wenn das ^ vor "dict" fehlt ?
Das liegt vermutlich daran, dass es noch den Konstruktor gibt, der ein IEnumerable<T>^ akzeptiert. D.h. dort wird ein Objekt auf dem CLR Heap erzeugt und dann wird mit diesem ein Stack Objekt (ein weiteres Dictionary Objekt) initialisiert. Da hätte ich wohl besser aufpassen müssen... :-( Aber es sieht schon etwas komisch aus, also dann besser nur:
C++:
Dictionary<String^,String^> dict;
oder konsequenterweise:
C++:
Dictionary<String^,String^>^ dict = gcnew Dictionary<String^,String^>();
Wobei wenn die Variable global sein soll, kommt nur die erste Möglichkeit in frage.

Gruß
 

Neue Beiträge

Zurück