얼마 전에 스택에 대신 힙에 객체가 선언되었을 때 나는 이것을 맹세했습니다. 나는 기본 클래스 (세부 :: 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를 선언 할 때 (또는 -ultimatelly- foo를 임시로) 선언 할 때와 다릅니다. 왜 그런가요?
는 참조 [? ";;'와'목록 ×()'모든 목록 X '사이에 차이가 있나요"]. C++의 FAQ 및 [동일] (http://yosefk.com/c++fqa/ctors.html#fqa-10.2)의 C++의 FAQ (/ com/C++ - faq-lite/ctors.html # faq-10.2) FQA. – outis