가독성을 위해 코드를 단락시키면서 너무 많이 변경하고 실수를 저지르고 있습니다. 이것은 여전히 압축되어 있지만 코드에서 바로 가져온 것입니다.C++ 함수에 대한 포인터의 다형성 포인터 전달
내 문제는 "function"이라는 클래스와 "virtual"연산자가있는 파생 클래스 "pwfunction"이 있다는 것입니다. "실제"함수에 대한 "함수"객체에 대한 포인터 배열을 전달하고() 연산자를 사용하고 싶습니다.
최종 수정 : 이것은 내가 말하는 것에 대한 SSCCE 버전입니다.
#include <iostream>
using namespace std;
class function
{
public:
virtual double operator() (double x) {return 1.5;}
};
class pwfunction : public function
{
public:
virtual double operator() (double x) {return 2.0;}
};
void interface();
void definefuncs (function** funcs, long unsigned numfuncs);
void interpolate(function* infunc);
void solvefuncs(function** funcs, long unsigned numfuncs);
int main()
{
interface();
return 0;
}
void interface()
{
long unsigned numfuncs = 1;
function* funcs[numfuncs];
definefuncs(funcs, numfuncs);
solvefuncs(funcs, numfuncs);
}
void definefuncs (function** funcs, long unsigned numfuncs)
{
interpolate(funcs[0]);
}
void interpolate(function* infunc)
{
infunc = new pwfunction();
cout<< (*infunc)(1.5)<<endl; //works
}
void solvefuncs(function** funcs, long unsigned numfuncs)
{
cout<< (*funcs[0])(1.5); //Error Message: Segmentation fault
}
[Works for me] (http://ideone.com/iYbOyN)와 같은 원래 변수를 할당해야합니다. valgrind도 불만 없습니다. 코드를 한 번 실수로 복사 한 경우 다른 코드도 만들 수 있습니까? 여기에 SSCCE를 붙여넣고 붙여 넣은 코드가 실제로 자신이 주장하는 행동을 나타내도록하십시오. – MvG