Вопрос

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);

не компилируется, тогда мы должны начать думать о проблеме.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top