Visual C ++ оператор + = является неоднозначным - PullRequest
1 голос
/ 05 июля 2011
CString szMsg;

//Other non related code

//stOrderInfo.bstrOrderNum is defined as a _bstr_t
szMsg += ", Order: " + stOrderInfo.bstrOrderNum;

Я конвертирую вышеупомянутое из VS 6.0 в VS2k10 и получаю следующую ошибку (компилируется в VS 6.0):

error C2593: 'operator +=' is ambiguous

Что именно это значит и как я могуисправить это?

Ответы [ 4 ]

2 голосов
/ 05 июля 2011

Поскольку вы жестко запрограммировали ", Order:" компилятору трудно решить, какой тип должен быть.

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

Так что он, вероятно, не может решить, является ли это CString или другим типом строки. Поэтому он не может решить, какой тип вы добавляете в szMsg.

Вы можете просто использовать приведение типа:

szMsg += (CString)(", Order: ") + (CString)((char *)(stOrderInfo.bstrOrderNum));

Приведение между типами строк:

Как: преобразовать между строковыми типами

2 голосов
/ 05 июля 2011

Это означает, что компилятор не может выбрать, какую + операцию использовать для конкатенации BSTR + char.У вас есть несоответствие трех типов: CString, _bstr_t и char.Попробуйте объединить все три операнда в один тип, например, в CString

0 голосов
/ 14 июля 2011

Лучше использовать CString::AppendFormat. Но убедитесь, что вы передали правильный спецификатор формата.

0 голосов
/ 05 июля 2011

Известно, что реализация CString::operator+= изменилась в Visual Studio 2010. Например, в предыдущих версиях он обрабатывал встроенные нулевые символы ОК, точно так же, как operator+ продолжает делать, но новая версия не делает.Так что это может быть связано с этим.

РЕДАКТИРОВАТЬ
Ссылка на обсуждение по этой теме:
http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/c5d7f383-da80-4776-b9b8-a6065839bd87

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...