继承实现不起作用

时间:2012-11-02 15:41:42

标签: c++ inheritance polymorphism

我有一个名为Generator的接口,如下所示:

class Generator{
public:
    virtual float getSample(Note &note)=0;
};

我的Synth类正在实现它,如下所示:

class Synth : public Generator{
public:
    virtual float getSample(Note &note);
};

float Synth::getSample(Note &note){
    return 0.5;
}

我正在尝试从我的Note类(具有生成器成员)调用getSample方法

class Note : public Playable{
public:
    Generator *generator;
    virtual float getValue();
};

float Note::getValue(){
    float sample = generator->getSample(*this); // gets stuck here
    return sample;
}

当我尝试运行时,它会卡在上面代码中的标记行上。问题是我没有收到非常明确的错误消息。这是我一旦停止就能看到的:

enter image description here enter image description here

1 个答案:

答案 0 :(得分:3)

好像你从未初始化成员Note::generator,因此调用它上面的函数是未定义的行为。

尝试,作为测试:

float Note::getValue(){
    generator = new Synth;
    float sample = generator->getSample(*this); // gets stuck here
    return sample;
}

如果有效,请返回并查看您的逻辑。使用std::unique_ptr<Generator>而不是原始指针。为Node创建构造函数。在那里初始化指针。