Я пишу модуль Apache на C ++. Мне нужно хранить общие данные, которые должны прочитать все дети, как часть общей памяти. Структура - это своего рода карта векторов, поэтому я хочу использовать карту STL и векторы для нее. Я написал общий распределитель и общий менеджер для этой цели, они отлично работают для векторов, но не для карт, ниже приведен пример:
typedef vector<CustomersData, SharedAllocator<CustomersData> > CustomerVector;
CustomerVector spData; //this one works fine
typedef SharedAllocator< pair< const int, CustomerVector > > PairAllocator;
typedef map<int, CustomerVector, less<int>, PairAllocator > SharedMap;
SharedMap spIndex; //this one doesn't work<
Я получаю ошибки во время компиляции, когда пытаюсь использовать второй объект (spIndex), который выглядит примерно так:
.. / SpatialIndex.h: 97: ошибка: '((SpatialIndex *) this) -> SpatialIndex :: spIndex' не имеет типа класса
Похоже, что компилятор не может определить тип для типа шаблона SharedMap, что странно, на мой взгляд, мне кажется, что все параметры шаблона были указаны.
Вы можете помочь?
Спасибо
Бенвенуто
Здравствуйте, спасибо за ваши комментарии.
SpatialIndex - это класс, который содержит контейнер, он в основном создается контейнером (SharedMap spIndex; является членом SpatialIndex) и двумя методами update и getData.
При методе обновления следующая строка кода выдает ошибку компилятора, приведенную выше:
int spKey = this->calculateSpKey( customer.getLat(), customer.getLong() );
this->spIndex[spKey].push_back(customer);
Изменение синтаксиса последней строки изменяет ошибку, которую дает компилятор, но в основном он говорит, что не может понять, какая переменная типа spIndex, или что он не может найти подходящий конструктор перегрузки для этого класса.