我收到以下基本错误:
1> c:\ program files \ microsoft visual studio 10.0 \ vc \ include \ utility(163):错误C2436:'second':成员函数或构造函数初始化列表中的嵌套类
除了那里的许多子错误之外 - 我根本不知道在哪里看或出了什么问题。 (我知道它的功能是什么,但我一直盯着它为什么不起作用)
标题部分:
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());
如上所述,我盯着自己,我为什么不能将这一对插入地图?我只是插入一个函数指针&amp;一个枚举?
答案 0 :(得分:0)
我可能错了,但我不喜欢这句话:
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));