Fehler C2593: Operator = ist nicht eindeutig
-
05-07-2019 - |
Frage
typedef map<wstring , IWString> REVERSETAG_CACHE ;
REVERSETAG_CACHE::iterator revrsetagcacheiter;
.
.
.
wstring strCurTag;
strCurTag = revrsetagcacheiter->second; //Error C2593
Fehler C2593: Operator = ist mehrdeutig
Warum wird die obige Zuordnung dieser Fehler geben? Es funktioniert in VC6. Lässt sich nicht kompilieren in VC9.
Lösung
revrsetagcacheiter->second
ist vom Typ IWString
.
Daher wird es nicht kompilieren. Ich glaube nicht, es auch in VC6 kompilieren.
Ich werde ein letztes Mal versuche: Ist Ihre BasicString Klasse c_str () Methode? Wenn dies der Fall versuchen Sie es konvertieren wstring std::wstring str(iter->second.c_str());
mit
Andere Tipps
Bei einer Vermutung erlaubt VC6 mehr als eine benutzerdefinierte Umwandlung angewandt werden, während (richtig) VC9 nicht. Schauen Sie sich auf C ++ implizite Konvertierungen für die Diskussion des allgemeinen Problems.
Die allgemeine Lösung ist die notwendige Umwandlung selbst, eher zu liefern, als haben die Compiler versuchen, es zu tun.
Versuchen Sie zu werfen, was Ihr in den richtigen Typ zugeordnet werden.
Wie zum Beispiel:
strCurTag = (wstring)revrsetagcacheiter->second;
Noch besser wäre es, können Sie gemeint haben:
IWstring strCurTag;
Sie sollten in der Regel implizite Konvertierungen vermeiden, das heißt machen alle Ihre Aufgaben mit genau an einer Seite der gleichen Art arbeiten und die anderen, vor allem wenn es trivial ist zu wissen, welche Arten beteiligt sind. Unter Berufung, oder versuchen, zu verlassen, auf implizite Konvertierungen ist keine gute Idee.
Also, wenn:
strCurTag = static_cast<wstring>(revrsetagcacheiter->second);
nicht kompiliert, dann sollten wir über das Problem nachzudenken beginnen.