Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用函子时,括号前面的表达式必须具有指向-函数类型的指针_C++_Object_Functor - Fatal编程技术网

C++ 使用函子时,括号前面的表达式必须具有指向-函数类型的指针

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,

因此,正如标题所述,我正在努力为我的游戏服务器地图类使用函子。我定义了以下模板类来表示分区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, 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.
}