Использование порта STL в VS2008 - PullRequest
0 голосов
/ 02 марта 2009

Я работаю над переносом нашего кода C ++ с eVC 4.0 на Visual Studio 2008. Наша цель - Windows Mobile 6.1, и мы используем Windows Mobile 6.0 SDK для нашего приложения.

Наш код использовал stl port при компиляции в eVC 4, и мы хотели бы продолжать использовать stl port, если это вообще возможно.

Кто-нибудь знает, какие шаги необходимы для включения порта STL (5.2.1) в наше приложение. Мы установили в решение каталоги include (как мы это делали для проекта eVC 4.0), но мы видим ошибки (ниже) каждый раз, когда пытаемся использовать команды list push_back или vector insert с нашими собственными классами (ниже приведена ошибка с нашим классом "TriangleBufferElement"). Кажется, что эти команды работают с нативными типами, такими как int, double и т. Д.

Мы убедились, что все классы имеют надлежащие конструкторы, конструкторы копирования, операторы присваивания и операторы сравнения, и все они выглядят правильными.

Есть идеи?

C:\Program Files\Windows CE Tools\stlport\stl/_construct.h(119) : error C2665: 'operator new' : none of the 2 overloads could convert all the argument types
1>        C:\Program Files\Windows Mobile 6 SDK\PocketPC\include\../../../Windows Mobile 6 SDK\PocketPC\Include\Armv4i/new(61): could be 'void *operator new(unsigned int,const std::nothrow_t &) throw()'
1>        while trying to match the argument list '(unsigned int, TriangleBufferElement *)'
1>        C:\Program Files\Windows CE Tools\stlport\stl/_construct.h(134) : see reference to function template instantiation 'void stlp_std::_Copy_Construct_aux<_Tp>(_Tp *,const _Tp &,const stlp_std::__false_type &)' being compiled
1>        with
1>        [
1>            _Tp=TriangleBufferElement
1>        ]
1>        C:\Program Files\Windows CE Tools\stlport\stl/_vector.h(381) : see reference to function template instantiation 'void stlp_std::_Copy_Construct<_Tp>(_Tp *,const _Tp &)' being compiled
1>        with
1>        [
1>            _Tp=TriangleBufferElement
1>        ]
1>        C:\Program Files\Windows CE Tools\stlport\stl/_vector.h(376) : while compiling class template member function 'void stlp_std::vector<_Tp>::push_back(const _Tp &)'
1>        with
1>        [
1>            _Tp=TriangleBufferElement
1>        ]
1>        c:\srcdevbranch\pointlib\dtmconverter\dtm\dtmreader\.\trianglebuffer.h(47) : see reference to class template instantiation 'stlp_std::vector<_Tp>' being compiled
1>        with
1>        [
1>            _Tp=TriangleBufferElement
1>        ]

Ответы [ 3 ]

1 голос
/ 03 марта 2009

Некоторые ссылки, которые вы, вероятно, должны видеть (если еще не видели):

STLPort Примечания:

Могут возникнуть проблемы с распределителем узлов SGI по умолчанию. У меня не было таких проблем, хотя. Распределитель узлов по умолчанию довольно быстрый, поэтому я бы не рекомендовал отключать его без веской причины. Однако, если это вызывает проблемы, определите _STLP_USE_MALLOC или _STLP_USE_NEWALLOC, чтобы получить базовый распределитель по умолчанию malloc() или new().

Хотя в этом сообщении говорится, что он еще не был портирован на VS2008.

0 голосов
/ 27 января 2011

В моем случае это было связано с определением __PLACEMENT_NEW_INLINE

0 голосов
/ 03 марта 2009

Переконфигурировали ли вы STLPort для новой среды компиляции? Visual Studio 2008 сильно отличается от старого компилятора eVC ++.

Попытка:


configure evc9
...