VC2008 и std::list<IUnknownPtr>
От: _Paul Россия  
Дата: 11.01.10 10:13
Оценка:
При переносе проекта с VC2003 на VC2008 перестала компилироваться конструкция std::list<IUnknownPtr>:
error C2664: 'std::allocator<_Ty>::construct' : cannot convert parameter 1 from 'IUnknown **' to '_com_ptr_t<_IIID> *'
Причина возникновения ошибки понятна — перегруженный оператор operator& у _com_ptr_t.

Проблема решена заменой list на vector, но хотелось бы узнать сталкивался ли кто-нибудь еще с этой проблемой и есть ли у нее другие решения?
Re: VC2008 и std::list<IUnknownPtr>
От: _nn_ www.nemerleweb.com
Дата: 11.01.10 10:28
Оценка: 4 (2) +2
Здравствуйте, _Paul, Вы писали:

_P>При переносе проекта с VC2003 на VC2008 перестала компилироваться конструкция std::list<IUnknownPtr>:

_P>error C2664: 'std::allocator<_Ty>::construct' : cannot convert parameter 1 from 'IUnknown **' to '_com_ptr_t<_IIID> *'
_P>Причина возникновения ошибки понятна — перегруженный оператор operator& у _com_ptr_t.

_P>Проблема решена заменой list на vector, но хотелось бы узнать сталкивался ли кто-нибудь еще с этой проблемой и есть ли у нее другие решения?


Есть класс ATL::CAdapt.

Typically, you will use CAdapt when you want to store CComBSTR, CComPtr, CComQIPtr, or _com_ptr_t objects in an STL container such as a list. You can't store objects of these types like this:

std::list< CComBSTR > m_List;

Instead, you should store adapter objects like this:
std::list< CAdapt< CComBSTR > > m_List;

http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.