Почему я не могу добавить 0 к CComSafeArray?
CComSafeArray<BYTE> arr;
arr.Add(0x00);
Ошибка -> C2668: 'ATL:: CComSafeArray:: Add': неоднозначный вызов перегруженной функции
Я могу добавить любое значение, но не могу добавить 0
зачем?
кстати в настоящее время я делаю
const byte zero = 0x00;
arr.Add(zero);
но я не понимаю причину, почему я не могу просто добавить 0
1 ответ
Решение
Метод добавления элемента:
HRESULT Add(_In_ const T& t, _In_ BOOL bCopy = TRUE) // 0x00 as zero for t
то есть ваш аргумент, как ожидается, будет иметь тип const BYTE&
, Есть, однако, другое Add
метод, который может принять ваш нулевой аргумент:
HRESULT Add(_In_ const SAFEARRAY *psaSrc) // 0x00 as NULL for pasSrc
Отсюда двусмысленность, и вы должны решить ее, приведя свой аргумент соответствующим образом:
CComSafeArray<BYTE> arr;
arr.Add((const BYTE&) 0x00);