我曾经拥有一个普通的成员变量,在构造函数中初始化如下:
变量是一个具有字符串键和成员函数指针的映射。这个方案完全没有问题。然而,我认为这个映射应该是静态的(?) - 映射的原因只是为了在读取文件期间确定程序应该做什么。- NULL表示"不执行任何特殊操作"。
所以我将其更改为以下内容:
现在编译突然出现很多错误。
1>c:\program files\microsoft visual studio 10.0\vc\include\utility(163): error C2440: 'initializing' : cannot convert from 'int' to 'GMProject::GMProjectMemFn '
这是关于NULL的转换。但这不应该是可能的吗?为什么这不可能(前一个方法中却可以)? 我是否应该在此处使用显式转换?
编辑: GMProjectMemFn定义如下:
ResourceSaveFunctions[OBJECTS_IDENT] = NULL;
ResourceSaveFunctions[SPRITES_IDENT] = &GMProject::SaveSprite;
ResourceSaveFunctions[SOUNDS_IDENT] = &GMProject::SaveSound;
ResourceSaveFunctions[BACKGROUNDS_IDENT] = &GMProject::SaveBackground;
ResourceSaveFunctions[PATHS_IDENT] = NULL;
ResourceSaveFunctions[SCRIPTS_IDENT] = NULL;
ResourceSaveFunctions[FONTS_IDENT] = NULL;
ResourceSaveFunctions[TIMELINES_IDENT] = NULL;
ResourceSaveFunctions[ROOMS_IDENT] = NULL;
ResourceSaveFunctions["extension"] = &GMProject::SaveExtension;
ResourceSaveFunctions[INCLUDES_IDENT] = NULL;
ResourceSaveFunctions[TRIGGERS_IDENT] = NULL;
变量是一个具有字符串键和成员函数指针的映射。这个方案完全没有问题。然而,我认为这个映射应该是静态的(?) - 映射的原因只是为了在读取文件期间确定程序应该做什么。- NULL表示"不执行任何特殊操作"。
所以我将其更改为以下内容:
std::map<std::string, GMProject::GMProjectMemFn> GMProject::ResourceSaveFunctions_INIT() {
std::map<std::string, GMProjectMemFn> tmp;
tmp.insert(std::make_pair(OBJECTS_IDENT,NULL));
tmp.insert(std::make_pair(SPRITES_IDENT, &GMProject::SaveSprite));
tmp.insert(std::make_pair(SOUNDS_IDENT, &GMProject::SaveSound));
tmp.insert(std::make_pair(BACKGROUNDS_IDENT, &GMProject::SaveBackground));
tmp.insert(std::make_pair(PATHS_IDENT, NULL));
tmp.insert(std::make_pair(SCRIPTS_IDENT, NULL));
tmp.insert(std::make_pair(FONTS_IDENT, NULL));
tmp.insert(std::make_pair(TIMELINES_IDENT, NULL));
tmp.insert(std::make_pair(ROOMS_IDENT, NULL));
tmp.insert(std::make_pair("extension", &GMProject::SaveExtension));
tmp.insert(std::make_pair(INCLUDES_IDENT, NULL));
tmp.insert(std::make_pair(TRIGGERS_IDENT, NULL));
return tmp;
}
const std::map<std::string, GMProject::GMProjectMemFn> GMProject::ResourceSaveFunctions(GMProject::ResourceSaveFunctions_INIT());
这些东西在头文件中声明:
static const std::map<std::string, GMProjectMemFn> ResourceSaveFunctions;
static std::map<std::string, GMProjectMemFn> ResourceSaveFunctions_INIT();
现在编译突然出现很多错误。
1>c:\program files\microsoft visual studio 10.0\vc\include\utility(163): error C2440: 'initializing' : cannot convert from 'int' to 'GMProject::GMProjectMemFn '
这是关于NULL的转换。但这不应该是可能的吗?为什么这不可能(前一个方法中却可以)? 我是否应该在此处使用显式转换?
编辑: GMProjectMemFn定义如下:
typedef void (GMProject::*GMProjectMemFn)(const pTree&) const;
pTree 是一个容器。
GMProjectMemFn
的定义是什么? - Constantinius