Пытаюсь собрать кроссплатфоерменное приложение Lunux/Windows под VS2003
Вроде все файлы есть, константы определил, что бы код собирался.
Ошибок в самом коде нет кроме одной:
В файле xhash:
При попытке сборки выдаёт сильно непонятную ошибку
\Microsoft Visual Studio .NET 2003\Vc7\include\xhash(164): error C2039: 'bucket_size' : is not a member of 'StringHash'
Ссылаясь на неизвестный тип данных в заголовочном файле xhash:
public:
typedef _Hash<_Traits> _Myt;
typedef typename _Traits::key_type key_type;
typedef typename _Traits::key_compare key_compare;
typedef typename _Traits::value_compare value_compare;
enum
{ // hoist constants from key_compare
bucket_size = key_compare::bucket_size, //--Ошибка
min_buckets = key_compare::min_buckets,
_Multi = _Traits::_Multi};
typedef _STD list<typename _Traits::value_type,
typename _Traits::allocator_type> _Mylist;
Я почитал по форумам и докам, вроде вообще эта часть кода недолжна под виндой затрагиваться.
И я вот незнаю может ещё где то константу надо описать, что бы компилятор уходил на нужную ветку.
MaIron wrote:
> Пытаюсь собрать кроссплатфоерменное приложение Lunux/Windows под VS2003
> Вроде все файлы есть, константы определил, что бы код собирался.
> Ошибок в самом коде нет кроме одной:
>
> В файле xhash:
> При попытке сборки выдаёт сильно непонятную ошибку
> \Microsoft Visual Studio .NET 2003\Vc7\include\xhash(164): error C2039: 'bucket_size' : is not a member of 'StringHash'
Странно, что кроссплатформенное приложение включает MSVC-specific хедер.
> Ссылаясь на неизвестный тип данных в заголовочном файле xhash:
>
> > public:
> typedef _Hash<_Traits> _Myt;
> typedef typename _Traits::key_type key_type;
> typedef typename _Traits::key_compare key_compare;
> typedef typename _Traits::value_compare value_compare;
> enum
> { // hoist constants from key_compare
> bucket_size = key_compare::bucket_size, //--Ошибка
> min_buckets = key_compare::min_buckets,
> _Multi = _Traits::_Multi};
> typedef _STD list<typename _Traits::value_type,
> typename _Traits::allocator_type> _Mylist;
>
>
> Я почитал по форумам и докам, вроде вообще эта часть кода недолжна под виндой затрагиваться.
> И я вот незнаю может ещё где то константу надо описать, что бы компилятор уходил на нужную ветку.
Похоже, что нужно определить константы bucket_size и min_buckets в функторе key_compare, посмотри как это сделано для off-the-shell функторов.
--
Maxim YegorushkinPosted via RSDN NNTP Server 1.9
Здравствуйте, MaIron, Вы писали:
MI>Пытаюсь собрать кроссплатфоерменное приложение Lunux/Windows под VS2003
MI>Вроде все файлы есть, константы определил, что бы код собирался.
MI>Ошибок в самом коде нет кроме одной:
MI>В файле xhash:
MI>При попытке сборки выдаёт сильно непонятную ошибку
MI>\Microsoft Visual Studio .NET 2003\Vc7\include\xhash(164): error C2039: 'bucket_size' : is not a member of 'StringHash'
MI>Ссылаясь на неизвестный тип данных в заголовочном файле xhash:
MI>MI>public:
MI> typedef _Hash<_Traits> _Myt;
MI> typedef typename _Traits::key_type key_type;
MI> typedef typename _Traits::key_compare key_compare;
MI> typedef typename _Traits::value_compare value_compare;
MI> enum
MI> { // hoist constants from key_compare
MI> bucket_size = key_compare::bucket_size, //--Ошибка
MI> min_buckets = key_compare::min_buckets,
MI> _Multi = _Traits::_Multi};
MI> typedef _STD list<typename _Traits::value_type,
MI> typename _Traits::allocator_type> _Mylist;
MI>
MI>Я почитал по форумам и докам, вроде вообще эта часть кода недолжна под виндой затрагиваться.
MI>И я вот незнаю может ещё где то константу надо описать, что бы компилятор уходил на нужную ветку.
Видимо речь идет об использовании чего-то типа stdext::hash_set (из STL для VC7.1), тогда подобная ошибка, если не ошибаюсь, может быть вызвана неправильным заданием параметров шаблона hash_set. Хотя интерфейс stdext::hash_set и std::set почти одинаков, параметры шаблона при задании своего предиката сравнения для stdext::hash_set выглядят иначе:
typedef
#if USE_HASH_SET // используем stdext::hash_set
stdext::hash_set<
MyData
, stdext::hash_compare< MyData, MyDataComp >
>
#else // используем std::set
std::set<
MyData
, MyDataComp
>
#endif
SET_MyData;