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

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

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

4

4 に答える 4

3

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

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

于 2009-06-16T08:29:32.700 に答える
2

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

最後にもう一度試してみます: BasicString クラスの c_str() メソッドですか? もしそうなら、それをwstringに変換してみてくださいstd::wstring str(iter->second.c_str());

于 2009-06-16T08:31:12.683 に答える
0

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

そのような:

strCurTag =  (wstring)revrsetagcacheiter->second;

さらに良いことに、次のことを意味している可能性があります。

IWstring strCurTag;
于 2009-06-16T08:31:03.620 に答える
0

通常、暗黙的な変換は避けるべきです。つまり、すべての代入を一方と他方でまったく同じ型で機能させる必要があります。特に、どの型が含まれているかを知るのが簡単な場合はそうです。暗黙の変換に依存する、または依存しようとすることは、良い考えではありません。

したがって、次の場合:

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

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

于 2009-06-16T10:01:21.757 に答える