C++ 使用函子时,括号前面的表达式必须具有指向-函数类型的指针
因此,正如标题所述,我正在努力为我的游戏服务器地图类使用函子。我定义了以下模板类来表示分区3D地图:C++ 使用函子时,括号前面的表达式必须具有指向-函数类型的指针,c++,object,functor,C++,Object,Functor,因此,正如标题所述,我正在努力为我的游戏服务器地图类使用函子。我定义了以下模板类来表示分区3D地图: template <typename T> class matrix3d { public: matrix3d(uint16_t XMin, uint16_t XMax, uint16_t YMin, uint16_t YMax, uint8_t ZMin, uint8_t ZMax); T* operator() (uint16_t x, uint16_t y,
template <typename T>
class matrix3d {
public:
matrix3d(uint16_t XMin, uint16_t XMax, uint16_t YMin, uint16_t YMax, uint8_t ZMin, uint8_t ZMax);
T* operator() (uint16_t x, uint16_t y, uint8_t z);
private:
uint16_t xmin, xmax;
uint16_t ymin, ymax;
uint8_t zmin, zmax;
int16_t dx, dy;
int8_t dz;
T* Entry; // This is an array that I new() in the class constructor.
};
因此,我的问题在于编译此函数时:LoadSector(filename,x,y,z)
,它会为每个扇区文件(我有大约10.000个这样的文件)调用,并从g_Map
检索相应扇区以存储解析的磁贴内容:
void LoadSector(const char* FileName, uint16_t x, uint16_t y, uint8_t z) {
TSector* sector = g_Map(x, y, z); // My actual problems is here.
// BEGIN PARSING.
}
VS代码说:“显然调用的括号前面的表达式必须有(指向-)函数类型”。
g++表示:g_Map不能用作函数。
g_Map
是指向矩阵3d
的指针。要在该matrix3d
对象上调用操作符()
,首先需要取消对指针的引用:
t扇区*扇区=(*g_图)(x,y,z);
这相当于:
t扇区*扇区=(*g_映射).operator()(x,y,z);
或者:
t扇区*sector=g_Map->operator()(x,y,z);
我重写了3次函数,这只是一个小小的错误。谢谢,这很有魅力。与您的问题无关,但您可以使用条目的容器类,而不是原始指针和手动内存管理,从而使您的生活更轻松。
void LoadSector(const char* FileName, uint16_t x, uint16_t y, uint8_t z) {
TSector* sector = g_Map(x, y, z); // My actual problems is here.
// BEGIN PARSING.
}