静态地图初始化函数错误

时间:2011-11-24 11:30:41

标签: c++ initialization static-members

我收到以下基本错误:

  

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;一个枚举?

1 个答案:

答案 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));