C2593 Erro: operador = é ambígua
-
05-07-2019 - |
Pergunta
typedef map<wstring , IWString> REVERSETAG_CACHE ;
REVERSETAG_CACHE::iterator revrsetagcacheiter;
.
.
.
wstring strCurTag;
strCurTag = revrsetagcacheiter->second; //Error C2593
C2593 Erro: operador = é ambígua
Por que a atribuição acima dar esse erro? Ele funciona em VC6. não compila em VC9.
Solução
revrsetagcacheiter->second
é do tipo IWString
.
Por isso, não irá compilar. Eu não acho que ele irá compilar em VC6 também.
Vou tentar uma última vez : é seu BasicString classe c_str método ()? Se assim tentar convertê-lo para wstring usando std::wstring str(iter->second.c_str());
Outras dicas
Em uma suposição, VC6 permite que mais de uma conversão definida pelo usuário para ser aplicado, enquanto que (corretamente) VC9 não. Dê uma olhada na C ++ conversões implícitas para discussão do problema geral.
A solução geral é fornecer a conversão necessária mesmo, ao invés de ter a chance compilador para fazê-lo.
Tente elenco que sua atribuição para o tipo correto.
Tais como:
strCurTag = (wstring)revrsetagcacheiter->second;
Melhor ainda, você pode ter significado:
IWstring strCurTag;
Você deve geralmente evitar conversões implícitas, ou seja, fazer todas as suas tarefas de trabalho com exatamente o mesmo tipo de um lado e do outro, especialmente quando é trivial para saber quais tipos estão envolvidos. Baseando-se, ou tentando contar, em conversões implícitas não é uma boa idéia.
Assim se:
strCurTag = static_cast<wstring>(revrsetagcacheiter->second);
não compila, então devemos começar a pensar sobre o problema.