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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top