juceでエラー発生 Out-of-line definition of '' does not match any declaration in ''
解決したいこと
下記の本を参考にjuceでシンセサイザーのプラグインを作っています。
https://www.oufac.com/
コントローラーを実装してビルドしたらエラーが発生しました。
そのエラーを解決しようとしたらさらにエラーが発生。。
解決方法を教えてください。
バージョン
・xcode:13.4.1 (13F100)
・MacOS:Monterey 12.3.1
発生している問題・エラー
Out-of-line definition of 'getCurrentProgram' does not match any declaration in 'JuceJapanDemoAudioProcessor'
該当するソースコード
// パラメータのfloat値をホストに返す関数
int JuceJapanDemoAudioProcessor::getCurrentProgram(int index)
{
if (index >= 0 && index < totalNumParam) // インデックスが配列の範囲内かチェック
return UserParams[index]; // 配列の内、インデックスで指定した変数の値を返す
else return 0; // インデックスが配列の範囲外であれば0を返す
}
// パラメータの値をホストから設定する関数
void JuceJapanDemoAudioProcessor::setCurrentProgram(int index, float value)
{
switch (index){
case MasterBypass:
UserParams[MasterBypass] = value;
break;
case Gain:
UserParams[Gain] = value;
break;
case Threshold:
UserParams[Threshold] = value;
break;
case Volume:
UserParams[Volume] = value;
break;
default: return;
}
}
自分で試したこと
エラー文(Plugin.Processor.cpp)より、ヘッダーの定義と一致していないと判断し、ヘッダー(Plugin.Processor.h)を確認。
該当箇所と思われる部分を修正したところ、さらにエラーが2つ発生。
そのエラーを解決しようとしたらさらにエラーが発生。
int getNumPrograms() override;// パラメータの項目数をホストに返す
int getCurrentProgram() override;// パラメータのfloat値をホストに返す
void setCurrentProgram(int index) override;// パラメータの値をホストから設定する
const juce::String getProgramName(int index) override;// パラメータの名前をホストに返す
↓修正
int getNumPrograms() override;// パラメータの項目数をホストに返す
int getCurrentProgram(int index) override;// パラメータのfloat値をホストに返す
void setCurrentProgram(int index, float value) override;// パラメータの値をホストから設定する
const juce::String getProgramName(int index) override;// パラメータの名前をホストに返す
↓異なるエラーが2つ発生
エラー①
Non-virtual member function marked 'override' hides virtual member function
xcodeが示すエラー箇所は「juce_AudioProcessor.h」の下記。
/** Returns the number of the currently active program. */
virtual int getCurrentProgram() = 0;
/** Called by the host to change the current program. */
virtual void setCurrentProgram (int index) = 0;
↓エラー文より、非仮想メンバ関数が仮想メンバ関数を隠している?、と判断し、下記修正。
/** Returns the number of the currently active program. */
virtual int getCurrentProgram(int index) = 0;
/** Called by the host to change the current program. */
virtual void setCurrentProgram (int index, float value) = 0;
大量のエラーが発生。
エラー箇所として様々なヘッダーファイルのinclude部分が示されて迷走しかけたので一旦断念。
エラー②
Allocating an object of abstract class type 'JuceJapanDemoAudioProcessor'
↓xcodeが示すエラー箇所
// This creates new instances of the plugin..
juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter()
{
return new JuceJapanDemoAudioProcessor();
}