我需要一些嵌套類的幫助。這是從我問的問題出現的hereVST C++嵌套類 - 構造和包含
基本上我有一個類'myPlugin'。這個類是我的程序的主體,並且包含'processReplacing'函數。
內部進程替換我需要使用DSP過濾信號,目前我使用11個過濾器,並導致11個過濾器(以及所有緩衝區)被硬編碼到processReplacing中。
但是,現在我決定創建一個過濾器類,因此我可以爲每個過濾器創建一個新實例,根據需要調用並提高代碼效率。
到目前爲止,我一直沒有成功。但是現在我正在使用嵌套類,如果我可以開始工作,應該意味着所有其他應該效仿。
在報頭中的類定義是:
class myPlugin : public AudioEffectX
{
公共: 爲myplugin(audioMasterCallback audioMaster); 〜myPlugin();
// Processing
virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
virtual void processDoubleReplacing (double** inputs, double** outputs, VstInt32 sampleFrames);
virtual void midiOutNoteOn (int iKey, int iVel);
virtual void midiOutNoteOff (int iKey, int iVel);
// Program
virtual void setProgramName (char* name);
virtual void getProgramName (char* name);
// Parameters
virtual void setParameter (VstInt32 index, float value);
virtual float getParameter (VstInt32 index);
virtual void getParameterLabel (VstInt32 index, char* label);
virtual void getParameterDisplay (VstInt32 index, char* text);
virtual void getParameterName (VstInt32 index, char* text);
virtual bool getEffectName (char* name);
virtual bool getVendorString (char* text);
virtual bool getProductString (char* text);
virtual VstInt32 getVendorVersion();
virtual VstInt32 canDo (char* text);
class aFilterL
{
friend class myPlugin;
public:
aFilterL();
~aFilterL();
float fOut1_l;
float filterOut1_l;
float Out_1_l;
float Out_2_l;
float* buffer_Out_1_l;
float* buffer_Out_2_l;
virtual float aFilterMethodL (float a0, float a1, float a2, float b1, float b2, float inputL, float prevInput1L, float prevInput2L)
{
Out_1_l = buffer_Out_1_l[0];
Out_2_l = buffer_Out_2_l[0];
filterOut1_l = (a0 * inputL) + (a1 * prevInput1L) + (a2 * prevInput2L) - (b1 * Out_1_l) - (b2 * Out_2_l) + 1.0E-25;
fOut1_l = filterOut1_l;
buffer_Out_2_l[0] = buffer_Out_1_l[0];
buffer_Out_1_l[0] = fOut1_l;
return fOut1_l;
}
};
class aFilterR
{
friend class myPlugin;
public:
aFilterR();
~aFilterR();
float fOut1_r;
float filterOut1_r;
float Out_1_r;
float Out_2_r;
float* buffer_Out_1_r;
float* buffer_Out_2_r;
virtual float aFilterMethodR (float a0, float a1, float a2, float b1, float b2, float inputR, float prevInput1R, float prevInput2R)
{
Out_1_r = buffer_Out_1_r[0];
Out_2_r = buffer_Out_2_r[0];
filterOut1_r = (a0 * inputR) + (a1 * prevInput1R) + (a2 * prevInput2R) - (b1 * Out_1_r) - (b2 * Out_2_r) + 1.0E-25;
fOut1_r = filterOut1_r;
buffer_Out_2_r[0] = buffer_Out_1_r[0];
buffer_Out_1_r[0] = fOut1_r;
return fOut1_r;
}
};
};#ENDIF
我的問題,那麼就是我不能正確初始化過濾器類。對於 '爲myplugin' 的構造看起來像這樣(請記住,這是實際的構造非常簡化的版本)
myPlugin::myPlugin (audioMasterCallback audioMaster)
:AudioEffectX(audioMaster,1,1)// 1個項目,1個參數僅 {
setNumInputs (2); // stereo in
setNumOutputs (2); // stereo out
setUniqueID ('Gain'); // identify
canProcessReplacing(); // supports replacing output
canDoubleReplacing(); // supports double precision processing
myPlugin *my_aFilter1L = new aFilterL();
myPlugin *my_aFilter1R = new aFilterR();
}
爲myplugin ::〜爲myplugin()
{ }
當我再嘗試和processReplacing它使用my_aFilter1L等引發錯誤:「錯誤C2065:my_aFilter1L「:未聲明的標識符」 和「錯誤C2227:左‘ - > aFilterMethodL’必須指向類/結構/ union/generic type「
我嘗試初始化存儲在myPlugin構造函數中的過濾器類中的值。我曾嘗試創建過濾器構造函數,即myPlugin :: aFilter1L()或 aFilter1L :: aFilter1L(),但是這些引發了更多錯誤。
不太確定我能做些什麼。我以前曾使用類/函數,但從未嵌套過類,因此有點丟失。我在網上看到很多線索,每個答案都不太適用;或者我嘗試了我找到的解決方案,但他們沒有工作。
非常感謝你!這似乎解決了它!一旦我有了名譽,就會確保你的答案投票! – 2011-02-03 11:35:48