Erreur C2593: l'opérateur = est ambigu
-
05-07-2019 - |
Question
typedef map<wstring , IWString> REVERSETAG_CACHE ;
REVERSETAG_CACHE::iterator revrsetagcacheiter;
.
.
.
wstring strCurTag;
strCurTag = revrsetagcacheiter->second; //Error C2593
Erreur C2593: l'opérateur = est ambigu
Pourquoi l’affectation ci-dessus donne-t-elle cette erreur? Cela fonctionne dans VC6. Ne compile pas dans VC9.
La solution
revrsetagcacheiter- & second
est de type IWString
.
Par conséquent, il ne sera pas compilé. Je ne pense pas qu'il compilera également dans VC6.
Je vais essayer une dernière fois : votre méthode BasicString de classe c_str () est-elle? Si c'est le cas, essayez de le convertir en wstring en utilisant std :: wstring str (iter- > second.c_str ());
Autres conseils
De façon approximative, VC6 permet d'appliquer plus d'une conversion définie par l'utilisateur, contrairement à VC9 (correctement). Consultez les conversions implicites C ++ pour en savoir plus sur le problème général.
La solution générale consiste à fournir la conversion nécessaire vous-même, plutôt que de laisser le compilateur essayer de le faire.
Essayez de convertir ce que vous attribuez au bon type.
Tels que:
strCurTag = (wstring)revrsetagcacheiter->second;
Mieux encore, vous avez peut-être voulu dire:
IWstring strCurTag;
Vous devez généralement éviter les conversions implicites, c’est-à-dire faire en sorte que toutes vos affectations fonctionnent avec exactement le même type d’un côté et de l’autre, en particulier s’il est trivial de savoir quels types sont impliqués. Compter sur les conversions implicites ou essayer de s’en remettre aux conversions implicites n’est pas une bonne idée.
Donc si:
strCurTag = static_cast<wstring>(revrsetagcacheiter->second);
ne compile pas, alors nous devrions commencer à penser au problème.