【发布时间】:2011-11-24 11:30:40
【问题描述】:
我收到以下基本错误:
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());
正如我所说的那样,我对此视而不见,为什么我不能将那对插入到地图中?我只是插入一个函数指针和一个枚举?
【问题讨论】:
-
您的函数 typedef 可能有误。试试:typedef
void (*DuplicateFn)(pTree&, const pTree&); -
std::map<...> 模板的实例化似乎出了点问题。编译器是否指向 std::map? 的模板构造函数
-
@visitor doh,这肯定是个小问题。虽然微不足道 - 我了解到您必须在 typedef 函数指针周围加上大括号。然而为什么? - 没有牙套我该怎么说? (PS:把它放在答案中>
-
@paul23:在您的代码中,编译器认为您正在为
void*定义一个typedef。奇怪的事情发生了。
标签: c++ initialization static-members