Не работает xhash
От: MaIron  
Дата: 27.09.05 06:51
Оценка:
Пытаюсь собрать кроссплатфоерменное приложение 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;


Я почитал по форумам и докам, вроде вообще эта часть кода недолжна под виндой затрагиваться.
И я вот незнаю может ещё где то константу надо описать, что бы компилятор уходил на нужную ветку.
Re: Не работает xhash
От: MaximE Великобритания  
Дата: 27.09.05 07:54
Оценка:
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 Yegorushkin
Posted via RSDN NNTP Server 1.9
Re: Не работает xhash
От: Warturtle  
Дата: 27.09.05 10:26
Оценка:
Здравствуйте, 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;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.