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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top