Почему я не могу добавить 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);
Другие вопросы по тегам