質問

typedef map<wstring , IWString> REVERSETAG_CACHE ;
REVERSETAG_CACHE::iterator   revrsetagcacheiter;
.
.
.
wstring strCurTag;
strCurTag =  revrsetagcacheiter->second; //Error C2593
  

エラーC2593:演算子=はあいまいです

上記の割り当てでこのエラーが発生するのはなぜですか? VC6で動作します。 VC9でコンパイルしません。

役に立ちましたか?

解決

revrsetagcacheiter-&gt; second IWString タイプです。 したがって、コンパイルされません。 VC6でもコンパイルされるとは思わない。

最後にもう一度試します:BasicStringクラスはc_str()メソッドですか?その場合は、 std :: wstring str(iter-&gt; second.c_str());

を使用してwstringに変換してみてください。

他のヒント

推測では、VC6では複数のユーザー定義の変換を適用できますが、VC9では(正しく)適用しません。一般的な問題については、 C ++の暗黙的な変換をご覧ください。

一般的な解決策は、コンパイラに実行させるのではなく、必要な変換を自分で提供することです。

割り当てたものを正しいタイプにキャストしてみてください。

例:

strCurTag =  (wstring)revrsetagcacheiter->second;

さらに良いのは、次のことを意味しているかもしれません:

IWstring strCurTag;

通常、暗黙の変換は避ける必要があります。つまり、特にどのタイプが関係しているかが簡単な場合、すべての割り当てを一方と他方でまったく同じタイプで動作させる必要があります。暗黙の変換に依存する、または依存しようとすることは、良い考えではありません。

次の場合:

strCurTag =  static_cast<wstring>(revrsetagcacheiter->second);

コンパイルしない場合、問題について考え始める必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top