错误C2593:运算符=不明确

时间:2009-06-16 08:25:32

标签: c++ visual-studio-2008 porting vc6 wstring

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

错误C2593:操作员=不明确

为什么上述作业会出现此错误?它适用于VC6。不在VC9中编译。

4 个答案:

答案 0 :(得分:3)

猜测,VC6允许应用多个用户定义的转换,而(正确)VC9则不允许。请查看C++ implicit conversions以了解一般问题。

一般的解决方案是自己提供所需的转换,而不是让编译器尝试这样做。

答案 1 :(得分:2)

revrsetagcacheiter->second的类型为IWString。 因此它不会编译。我不认为它也会在VC6中编译。

我会尝试最后一次:你的BasicString类是c_str()方法吗?如果是这样,请尝试使用std::wstring str(iter->second.c_str());

将其转换为wstring

答案 2 :(得分:0)

尝试将您指定的内容转换为正确的类型。

如:

strCurTag =  (wstring)revrsetagcacheiter->second;

更好的是,你可能意味着:

IWstring strCurTag;

答案 3 :(得分:0)

您通常应该避免隐式转换,即使所有作业在一侧和另一侧使用完全相同的类型,尤其是在知道涉及哪些类型时很容易。依赖或试图依赖隐式转换并不是一个好主意。

所以如果:

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

没有编译,那么我们应该开始考虑这个问题。