1

私は次のようなジェネレーターと呼ばれるインターフェースを持っています:

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

メンバーを初期化したことがないようですNote::generator。そのため、メンバーで関数を呼び出すことは未定義の動作です。

テストとして試してみてください:

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

それが機能する場合は、戻ってロジックを確認してください。std::unique_ptr<Generator>生のポインタの代わりに使用してください。のコンストラクターを作成しますNode。そこでポインタを初期化します。

于 2012-11-02T15:43:28.767 に答える