typedef map<wstring , IWString> REVERSETAG_CACHE ;
REVERSETAG_CACHE::iterator revrsetagcacheiter;
.
.
.
wstring strCurTag;
strCurTag = revrsetagcacheiter->second; //Error C2593
错误 C2593:运算符 = 不明确
为什么上述作业会出现此错误?它适用于VC6。不能在 VC9 中编译。
typedef map<wstring , IWString> REVERSETAG_CACHE ;
REVERSETAG_CACHE::iterator revrsetagcacheiter;
.
.
.
wstring strCurTag;
strCurTag = revrsetagcacheiter->second; //Error C2593
错误 C2593:运算符 = 不明确
为什么上述作业会出现此错误?它适用于VC6。不能在 VC9 中编译。
猜测一下,VC6 允许应用多个用户定义的转换,而(正确地)VC9 不允许。查看C++ 隐式转换以讨论一般问题。
一般的解决方案是自己提供所需的转换,而不是让编译器尝试去做。
revrsetagcacheiter->second
是类型IWString
。因此它不会编译。我认为它也不会在 VC6 中编译。
我会尝试最后一次:您的 BasicString 类是 c_str() 方法吗?如果是这样,请尝试使用将其转换为 wstringstd::wstring str(iter->second.c_str());
尝试将您分配的内容转换为正确的类型。
如:
strCurTag = (wstring)revrsetagcacheiter->second;
更好的是,您可能的意思是:
IWstring strCurTag;
您通常应该避免隐式转换,即让您的所有分配在一侧和另一侧使用完全相同的类型,尤其是当知道涉及哪些类型很简单时。依赖或试图依赖隐式转换不是一个好主意。
因此,如果:
strCurTag = static_cast<wstring>(revrsetagcacheiter->second);
不编译,那我们就该开始思考问题了。