我得到以下基本错误:
1>c:\program files\microsoft visual studio 10.0\vc\include\utility(163): error C2436: 'second' : member function or nested class in constructor initializer list
还有很多子错误 - 我完全不知道去哪里看或出了什么问题。 (我知道它的功能是什么,但我对它不起作用的原因视而不见)
头部部分:
typedef void *DuplicateFn(pTree&, const pTree&);
enum DuplicateTy {
SKIP,
OVERWRITE,
ASK
};
typedef std::map<DuplicateTy, DuplicateFn> DuplicateMapTy;
static const DuplicateMapTy DuplicateFns;
static DuplicateMapTy DuplicateFns_INIT();
详细命名空间:
namespace detail {
void OverWriteFn(GMProject::pTree& tOut, const GMProject::pTree& tIn);
void AskFn(GMProject::pTree& tOut, const GMProject::pTree& tIn);
}
源码部分:
GMProject::DuplicateMapTy GMProject::DuplicateFns_INIT() {
DuplicateMapTy tmp;
auto p(std::make_pair(GMProject::OVERWRITE, &detail::OverWriteFn));
tmp.insert(p); //offending line
return tmp;
}
const GMProject::DuplicateMapTy GMProject::DuplicateFns(GMProject::DuplicateFns_INIT());
如前所述,我对此视而不见,为什么我不能将那对插入到 map 中?我只是插入一个函数指针和一个枚举?
最佳答案
我可能是错的,但我不喜欢这句话:
auto p(std::make_pair(GMProject::OVERWRITE, &detail::OverWriteFn));
您使用的是 VS 2010 吗?您可以将鼠标悬停在变量名称 (p
) 上,然后查看 auto
推导出的类型。
还有,你试过吗:
tmp.insert(std::make_pair(GMProject::OVERWRITE, &detail::OverWriteFn));
或者
tmp.insert(std::pair(GMProject::OVERWRITE, &detail::OverWriteFn));
?
关于c++ - 静态 map 初始化函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8256328/