Ошибка C2593: оператор = является неоднозначным
-
05-07-2019 - |
Вопрос
typedef map<wstring , IWString> REVERSETAG_CACHE ;
REVERSETAG_CACHE::iterator revrsetagcacheiter;
.
.
.
wstring strCurTag;
strCurTag = revrsetagcacheiter->second; //Error C2593
Ошибка C2593: оператор = неоднозначен
Почему приведенное выше назначение дает эту ошибку? Работает в VC6. Не компилируется в VC9.
Решение
revrsetagcacheiter- > second
имеет тип IWString
.
Следовательно, это не скомпилируется. Я не думаю, что он будет компилироваться и в VC6.
Я попробую в последний раз . Является ли ваш метод BasicString классом c_str ()? Если это так, попробуйте преобразовать его в wstring, используя std :: wstring str (iter- > second.c_str ());
Другие советы
По-видимому, VC6 допускает применение нескольких пользовательских преобразований, в то время как (правильно) VC9 этого не делает. Посмотрите неявные преобразования C ++ для обсуждения общей проблемы.
Общее решение состоит в том, чтобы предоставить необходимое преобразование самостоятельно, а не пытаться сделать это компилятором.
Попробуйте привести то, что вы присваиваете, к правильному типу.
Например:
strCurTag = (wstring)revrsetagcacheiter->second;
Еще лучше, вы могли иметь в виду:
IWstring strCurTag;
Обычно следует избегать неявных преобразований, т. е. заставить все ваши назначения работать с одним и тем же типом с одной стороны, а с другой, особенно когда очень просто знать, какие типы задействованы. Полагаться или пытаться полагаться на неявные преобразования не очень хорошая идея.
Так что если:
strCurTag = static_cast<wstring>(revrsetagcacheiter->second);
не компилируется, тогда мы должны начать думать о проблеме.