Domanda

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

Errore C2593: Operator = is ambiguous

Perché il compito sopra riportato dà questo errore? Funziona in VC6. Non compilare in VC9.

È stato utile?

Soluzione

revrsetagcacheiter- > second è di tipo IWString . Quindi non verrà compilato. Non penso che verrà compilato anche in VC6.

Proverò un'ultima volta : il tuo metodo c_str () di classe BasicString? In tal caso, prova a convertirlo in wstring usando std :: wstring str (iter- > second.c_str ());

Altri suggerimenti

In base a un'ipotesi, VC6 consente di applicare più di una conversione definita dall'utente, mentre (correttamente) VC9 no. Dai un'occhiata a conversioni implicite C ++ per discutere del problema generale.

La soluzione generale è fornire tu stesso la conversione necessaria, piuttosto che far provare il compilatore a farlo.

Prova a trasmettere ciò che stai assegnando al tipo corretto.

Ad esempio:

strCurTag =  (wstring)revrsetagcacheiter->second;

Meglio ancora, potresti aver inteso:

IWstring strCurTag;

Di solito dovresti evitare conversioni implicite, ovvero far funzionare tutti i tuoi compiti esattamente con lo stesso tipo da un lato e dall'altro, specialmente quando è banale sapere quali tipi sono coinvolti. Affidarsi o provare a fare affidamento su conversioni implicite non è una buona idea.

Quindi se:

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

non viene compilato, quindi dovremmo iniziare a pensare al problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top