Re[2]: проблема с typename
От: Lmdrv Россия  
Дата: 20.10.03 11:34
Оценка:
Здравствуйте, Ed.ward, Вы писали:

EW>Здравствуйте, Andy77, Вы писали:


A>>пытаюсь откомпилировать Stingray Stidio под VS2003... на мой взгляд, всё выглядит нормально, однако компилятор считает по-другому...


A>>
A>>--<list>--------------------------------------------------------------------------------------
A>>template<class _Ty,
A>>    class _Ax = allocator<_Ty> >
A>>    class list
A>>        : public _List_val<_Ty, _Ax>
A>>    {
A>>        class iterator
A>>            : public const_iterator
A>>            {
A>>            }
A>>    };

A>>--<example>-----------------------------------------------------------------------------------

A>>#include <list>

A>>template <typename _Aggr, typename _Iter = typename _Aggr::iterator>
A>>class Iterator
A>>{
A>>};

A>>template <typename _Component>
A>>class CComposite
A>>{
A>>    typedef std::list<_Component* > Children;

A>>    class CompIterator:
A>>        public Iterator<  >  // z:\nd\CppTest\Temp.h(16): error C2923: 'Iterator' : 'std::list<_Ty*>::iterator' is 
A>>                                           // invalid as template argument '#2', type expected
A>>                                           // z:\nd\CppTest\Temp.h(16): warning C4346: 'std::list<_Ty*>::iterator' : dependent 
A>>                                           // name is not a type
A>>    {
A>>    };
A>>};
A>>


EW>
EW>template <typename _Aggr, typename _Iter = typename _Aggr::iterator>
EW>


EW>Ed.ward


Тоже попытался скомпилировать Stingray Studio 2002 под VS 2003.
Правда я пытался компилировать только SFL.
Столкнулся с той же проблемой.Что касается необходимости добавления ключевого typename, то это не самое страшное на мой взгляд (ибо про это рассказано в MSDN, там где описаны отличия VC++ от предыдущих версий).
Но вот дальше хуже:
упорно не хотел компилится класс CComposite, а именно определение вложенного класса
62: class CompIterator:
63: public Iterator<Children>
ругалось warning-ом аналогичным, тем фрагментам которые указал Andy77. Причем добавление typename не помогло (где я только его не ставил )

Пришлось вписать руками "typedef Iterator<Children> ChildrenIterator;"
а затем упомянутый выше фрагмент изменить на такой:
class CompIterator:
public ChildrenIterator;

Кроме того, попытавшись в примере Scribble (в подкаталоге Foundation) раскомментировать строку
//#define MDI
получаю ошибку в библиотечном файле mdiwnd.h в методе CMDIFrameImpl::MdiFrameProc, вызванную тем что в последних версиях ATL вместо стандартной структуры MSG используется _ATL_MSG.
Подозреваю что это далеко не все , точнее все еще впереди . Наверняка будут и другие грабли.
Поделись пожалуйста опытом испольования Stingray Studio 2002 и VS.NET 2003.

P.S: кажется Roguе Wave выпустила Update для Stingray Studio. У вас случайно нету?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.