Здравтсвуйте. Пытаюсь откомпилировать свой проект (использует WTL) на с++.NET 2003 standart
он ругается на atlsimpstr.h. Я выдернул кусок, который ему не нравится, это шаблонный класс
(см. комментарий в классе CSimpleStringT)
говорит
..\atlmfc\include\atlsimpstr.h(195) : warning C4346: 'ATL::ChTraitsBase<BaseType>::XCHAR' : dependent name is not a type
prefix with 'typename' to indicate a type
..\atlmfc\include\atlsimpstr.h(750) : see reference to class template instantiation 'ATL::CSimpleStringT<BaseType>' being compiled
..\atlmfc\include\atlsimpstr.h(195) : error C2146: syntax error : missing ';' before identifier 'XCHAR'
..\atlmfc\include\atlsimpstr.h(195) : error C2501: 'ATL::CSimpleStringT<BaseType>::XCHAR' : missing storage-class or type specifiers
..\atlmfc\include\atlsimpstr.h(196) : warning C4346: 'ATL::ChTraitsBase<BaseType>::PXSTR' : dependent name is not a type
#include <atlbase.h>
template< typename BaseType = char >
class ChTraitsBase
{
public:
typedef char XCHAR;
typedef LPSTR PXSTR;
typedef LPCSTR PCXSTR;
typedef wchar_t YCHAR;
typedef LPWSTR PYSTR;
typedef LPCWSTR PCYSTR;
};
template<>
class ChTraitsBase< wchar_t >
{
public:
typedef wchar_t XCHAR;
typedef LPWSTR PXSTR;
typedef LPCWSTR PCXSTR;
typedef char YCHAR;
typedef LPSTR PYSTR;
typedef LPCSTR PCYSTR;
};
template< typename BaseType >
class CSimpleStringT
{
public:
typedef ChTraitsBase< BaseType >::XCHAR XCHAR; // Если вместо BaseType поставить wchar_t, компилятор доволен
typedef ChTraitsBase< BaseType >::PXSTR PXSTR; // иначе ругается
typedef ChTraitsBase< BaseType >::PCXSTR PCXSTR;
typedef ChTraitsBase< BaseType >::YCHAR YCHAR;
typedef ChTraitsBase< BaseType >::PYSTR PYSTR;
typedef ChTraitsBase< BaseType >::PCYSTR PCYSTR;
};
если взять компилятор от Visual Studio.NET, то все ок. Да, еще, все библиотеки взяты из Visual Studio.NET
Это ограничение standart редакции компилятора? или надо atl другую?
26.09.03 15:41: Перенесено модератором из 'Средства разработки' — ПК