Я мог бы поклясться, что это сработало некоторое время назад, когда мой объект был объявлен в куче, а не в стеке.У меня есть функция, которая принимает указатель на базовый класс (detail :: DuplicateFn).- Хотя это виртуальный класс, фактические указатели даются производным классом (т.е. dteail :: SkipFn)
1>GMProject.cpp(298): error C2664:
'void xml_tree<V>::combine_if<bool(__cdecl *)(const T &,const T &)>(const xml_tree<V> &,Predicate,const detail::DuplicateFn *)' :
cannot convert parameter 3 from 'detail::SkipFn (__cdecl *)(void)' to 'const detail::DuplicateFn *'
Моя функция:
void GMProject::CombineTree(const pTree& Other) {
detail::SkipFn foo();
ProjectTree.combine_if(Other, &SimilarTreeValue<GMProject::pTree>, &foo);
}
Где ProjectTree.combine_if () в качестве третьего параметра требуется указатель на «DuplicateFn» - а SkipFn является производным от DuplicateFn.
Как уже говорилось, это работает (как я и ожидал) правильно, если я объявляю «foo» в куче.Однако это не так, когда объявляется foo в стеке (или, что делает foo временным).Почему это так?