我正在用 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<
当我尝试使用第二个对象 (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);
改变最后一行的 sintax 会改变编译器给出的错误,但基本上它说它无法理解 spIndex 是哪个类型变量,或者它找不到该类的适当重载构造函数。