c++ - 静态 map 初始化函数错误

标签 c++ initialization static-members

我得到以下基本错误:

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/

相关文章:

c++ - ios_base 和静态成员

c++ - Directx C++ - 绘制 DNA 形状

c++ - lz4 压缩 C++ 示例

Javascript - 对象初始值设定项?

c++ - 用于初始化模板类的静态数据成员的部分模板特化

c++ - 重写 C++ 中的静态方法

c++ - Mac OS X 上的 g++ - CoreServices.h 错误

c++ - 以 1kB block 读取文件并使用 cstdio 写入另一个文件

ios - 类实例的所有存储属性必须在从初始化器抛出之前初始化

c++ - 为什么 GCC 不报告未初始化的变量?