我正在使用Sine Oscillator回调处理其中一个STK程序。由于Generator类中的Virtual函数导致我的ToneGen类被抽象,因此从ToneGen类创建一个继承Generator类的对象时遇到问题。我已经尝试了指针,但它似乎导致问题将数据转换为适当的方法。如果我使用指针,我的代码会在ToneGen.h文件中断开
void setRate( StkFloat rate ) { rate_ = rate; };
否则没有指针我会收到此错误
src\crtToneGen.cpp(36): error C2259: 'stk::ToneGen' : cannot instantiate abstract class
due to following members:
'stk::StkFrames &stk::Generator::tick(stk::StkFrames &,unsigned int)' : is abstract
C:\VS10 Projects\StkNewInst\crtToneGen\include\Generator.h(43) : see declaration of 'stk::Generator::tick'
这是生成器类中的虚函数
virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 )=0;
无论如何要避免这种情况,我在其他帖子上尝试了其他几种技术,但还没有运气。
我正在修改的代码可以找到here
我在VisualStudio 2010 Windows 7 32位上执行此操作
答案 0 :(得分:0)
stk::StkFrames &stk::Generator::tick(stk::StkFrames &,unsigned int)
是抽象的,需要在派生类中实现
class ToneGen: public stk::Generator
{
stk::stkFrames& tick(stk::StkFrames& frames,unsigned int something)
{
return stk::stkFrames(); // Don't do this, return something useful.
}
}
您必须在派生类中实现此函数,因为基类不为此方法提供任何功能。它在stk
标题中的声明是:
stk::StkFrames &stk::Generator::tick(stk::StkFrames &,unsigned int) = 0;