0

在试图缩短我的代码以提高可读性时,我最终改变了太多并犯了错误。这仍然是浓缩的,但直接取自我的代码。

我的问题是我有一个名为“function”的类和一个派生类“pwfunction”,它们都有 virtual () 运算符。我想将指向我的“函数”对象的指针数组传递给各种实际函数并使用 () 运算符。

最终编辑:这是我所说的 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
}
4

2 回答 2

0

您没有为 中的funclist数据分配数组somefunction,因此任何事情都可能发生。也许你的意思是

func* funclist[1];

表示一个单元素的func指针数组。

于 2013-05-03T22:30:54.857 回答
0

问题来自以下方面:

void interpolate(function* infunc)
{
    infunc = new pwfunction();
    cout<< (*infunc)(1.5)<<endl;    //works
}

可能没有做你想做的事。infunc 是在本地分配的,这不会影响外部的任何其他内容或此函数(顺便说一句,内存泄漏)。插值应该要么返回 infunc,要么分配原始变量,例如

void interpolate(function*& infunc) ...
于 2013-05-03T23:31:35.217 回答