C++ で Apache モジュールを作成しています。すべての子が共有メモリの一部として読み取る必要がある共通データを格納する必要があります。構造はベクトルの地図のようなものなので、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<
2 番目のオブジェクト (spIndex) を使用しようとすると、次のようなコンパイル エラーが発生します。
../SpatialIndex.h:97: エラー: '((SpatialIndex*)this)->SpatialIndex::spIndex' にクラス型がありません
コンパイラが SharedMap テンプレート タイプのタイプを判別できないように見えますが、これは私の意見では奇妙です。すべてのテンプレート パラメータが指定されているように思えます。
手伝ってくれますか?
ありがとうベンヴェヌート
こんにちは、コメントありがとうございます。
SpatialIndex はコンテナを含むクラスで、基本的にはコンテナ (SpatialIndex のメンバーである SharedMap spIndex) と 2 つのメソッド update と getData によって作成されます。
update メソッド内で、次のコード行で上記のコンパイラ エラーが発生します。
int spKey = this->calculateSpKey( customer.getLat(), customer.getLong() );
this->spIndex[spKey].push_back(customer);
最後の行の構文を変更すると、コンパイラが与えるエラーが異なりますが、基本的には、どの型変数 spIndex が理解できないか、このクラスの適切なオーバーロード コンストラクターが見つからないことを示しています。