1

我有一个名为 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;
}

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

在此处输入图像描述 在此处输入图像描述

4

1 回答 1

3

似乎您从未初始化过 member Note::generator,因此在其上调用函数是未定义的行为。

尝试,作为测试:

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

如果可行,请返回并检查您的逻辑。使用 astd::unique_ptr<Generator>而不是原始指针。为Node. 在那里初始化指针。

于 2012-11-02T15:43:28.767 回答