Pregunta

typedef map<wstring , IWString> REVERSETAG_CACHE ;
REVERSETAG_CACHE::iterator   revrsetagcacheiter;
.
.
.
wstring strCurTag;
strCurTag =  revrsetagcacheiter->second; //Error C2593
  

Error C2593: Operator = es ambiguo

¿Por qué la asignación anterior da este error? Funciona en VC6. No compila en VC9.

¿Fue útil?

Solución

revrsetagcacheiter- > second es de tipo IWString . De ahí que no se compile. No creo que se compile también en VC6.

Lo intentaré una última vez : ¿Es su método BasicString class c_str ()? Si es así, intente convertirlo en wstring usando std :: wstring str (iter- > second.c_str ());

Otros consejos

En una suposición, VC6 permite que se apliquen más de una conversión definida por el usuario, mientras que (correctamente) VC9 no lo hace. Echa un vistazo a conversiones implícitas de C ++ para conocer el problema general.

La solución general es proporcionar la conversión necesaria, en lugar de que el compilador intente hacerlo.

Intenta transmitir lo que estás asignando al tipo correcto.

Tales como:

strCurTag =  (wstring)revrsetagcacheiter->second;

Mejor aún, es posible que hayas querido decir:

IWstring strCurTag;

Por lo general, debe evitar las conversiones implícitas, es decir, hacer que todas sus tareas funcionen con exactamente el mismo tipo en un lado y en el otro, especialmente cuando es trivial saber qué tipos están involucrados. Confiar o intentar confiar en las conversiones implícitas no es una buena idea.

Entonces, si:

strCurTag =  static_cast<wstring>(revrsetagcacheiter->second);

no se compila, entonces deberíamos empezar a pensar en el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top