такой вопрос,
из-за чего может возникать сообщение об ошибке
error C2666: '[]' : 2 overloads have similar conversions
в следующем куске кода
{
MessageBuffer[24+i] = m_sMessage[i];
}
где
BYTE *MessageBuffer = new BYTE[n];
CString m_sMessage;
?????
ошибка возникает с оператором [] для CString
PS. имеется такой же кусок кода в другом проекте, где он замечательно компилируется.....
> такой вопрос, > из-за чего может возникать сообщение об ошибке > error C2666: '[]' : 2 overloads have similar conversions > в следующем куске кода > { > MessageBuffer[24+i] = m_sMessage[i]; > } > где > BYTE *MessageBuffer = new BYTE[n]; > CString m_sMessage; > ????? > ошибка возникает с оператором [] для CString > PS. имеется такой же кусок кода в другом проекте, где он > замечательно компилируется..... >
да ХЗ..., может оператор был перегружен. раз он показал - '[]' : 2 overloads - а дальше не показывает какие 2 overloads именно? или еще какое нить сообщение, к примеру - See declaration of class CString?
А какого типа у тебя параметр i ?
На всякий случай мона сделать так, проблема должна исчезнуть.
MessageBuffer[24+i] = (BYTE)m_sMessage[int(i)];
> А какого типа у тебя параметр i ? вот это да. Просто офигеть.
i у меня был объявлен как UINT и при этом он выдавал вышеозначенную ошибку...
при замене на int всё замечательно компилируется...
ваши комментарии.
> > > А какого типа у тебя параметр i ? > вот это да. Просто офигеть. > i у меня был объявлен как UINT и при этом он выдавал > вышеозначенную ошибку... > при замене на int всё замечательно компилируется... > ваши комментарии.
Ничего офигительного.
Вся фишка в том, что обычно через оператор [] обращаются индексом типа size_t - unsigned int
а в CString есть оператор :
TCHAR operator [] (int nIndex) const
так вот, когда ты к нему (к стригу) обращаешься, компилятор не знал какой оператор задействовать, потому что он можен сконвертировать твой UINT в int, тогда идет оператор класса.
а так же (я так пологаю) CString => const char* /operator LPCTSTR/ => operator [] (size_t index) - стандартный оператор указателя/массива.
Вот он и матюгался. Ошибка выявляется, когда идет 2-ой "перегужаемый" смысл. Поэтому никогда не ленись делать casting спокойней спать будешь и без анальгина :)))))
а почему он компилился в другом проекте без ошибок - не могу сказать. Скорее всего какие то опции были заменены, или разные компиляторы - версия или компания. это уже ты знаешь.