2017-05-04 32 views
-4

私はこのエラーが表示されます。純粋仮想関数のエラー

In function 'bool detect_feedback(AudioEffect*)': 

54:30: error: cannot convert 'std::shared_ptr<AudioEffect>' to 'AudioEffect*' in assignment 

55:16: error: cannot convert 'std::shared_ptr<AudioEffect>' to 'AudioEffect*' in assignment 

55:40: error: cannot convert 'std::shared_ptr<AudioEffect>' to 'AudioEffect*' in assignment 

次のようにコードは次のとおりです。

#include<stdlib.h> 
#include<iostream> 
#include<memory>` 

//BASE CLASS 

// audio and have a subsequent effect (next). 

struct AudioEffect 
{ 
    virtual ~AudioEffect() = default; 
    virtual void process(float* buf, size_t num) = 0; 
    std::shared_ptr<AudioEffect> next; 
}; 

//DERIVING MULTIPLE AUDIO-EFFECTS 

//Noise Gate 

struct NoiseGate: public AudioEffect 
{ 
    float threshold; 
    void process(float *buf, size_t num) 
    { 
     if (*buf > threshold) 
      *buf = threshold; 
    } 
}; 

//Gain Boost 

struct GainBoost: public AudioEffect 
{ 
    float signal; 
    void process(float *buf, size_t num) 
    { 
     *buf = *buf + signal; 
    } 
}; 

//Compressor 

struct Compressor: public AudioEffect 
{ 
    float offset; 
    void process(float *buf, size_t num) 
    { 
     *buf = *buf - offset; 
    } 
}; 

//Function 
// Implement a function that checks if there is a feedback loop 
// in the effects chain. 
//... detect_feedback(...) 
//{ 
//} 

bool detect_feedback (AudioEffect *ae) 
{ 
    AudioEffect *p, *q; 
    for (p = ae;p != NULL; p = p->next) 
     for (q = p->next; q != NULL; q = q->next) 
      if (typeid(*p) == typeid(*q)) 
       return true; 
    return false; 
} 

//MAIN 

int main(int argc, char *argv[]) 
{  
    return 0; 
} 
+0

私は 'std :: shared_ptr'、特に' * '演算子について熟知しています。 – lfgtm

+0

生ポインタと共有ポインタを混在させるのはなぜですか?あなたはこのコードを書いたのですか、それとも他の人ですか? –

+0

純粋な仮想関数とはまったく関係ありません。あなたはあなたの問題を[MCVE]に還元すべきです。 –

答えて

1

あなたは、生のポインタにshared_ptrを割り当てることはできません。ローポインタを取得するには、.get()メソッドを使用する必要があります。

(p->next).get() 
関連する問題