我需要的嵌套类一些帮助。 这已经从一个问题,我问异军突起这里
基本上我有一个类“为myplugin”。 这个类是我的程序的体积和包括“processReplacing”功能。
在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;
}
};
};#万一
那么我的问题是,我不能正确初始化过滤器类。 对于“为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’必须指向类/结构/联合/通用型”
我曾尝试初始化存储在为myplugin构造函数中的过滤器类值。 我曾尝试创建过滤器的构造,即为myplugin :: aFilter1L() 或 aFilter1L :: aFilter1L(),但这些都造成了更多的错误。
不太清楚我能做些什么。 我以前带班/功能的工作,但从来没有嵌套类,所以有点失落。 我见过很多线程的在线和每一个答案,并不完全适用; 或者我已经试过我找到了解决方案,他们都没有奏效。