Errore C2593: Operatore = è ambiguo
-
05-07-2019 - |
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.
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.