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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top