Я работаю над одной из программ STK, используя обратный вызов синусоидального генератора. У меня возникают проблемы при создании объекта из моего класса ToneGen, который наследуется от класса Generator, из-за виртуальной функции в классе Generator, которая заставляет мой класс ToneGen абстрагироваться. Я пробовал указатели, но это, кажется, вызывает проблемы с получением данных для соответствующего метода. Если я использую указатели, мой код прерывается здесь в файле 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;
В любом случае, чтобы избежать этого, я попробовал несколько других методов на другом посту, но еще не повезло.
Код, который я изменяю, можно найти Вот
Я делаю это на VisualStudio 2010 Windows 7 32 бит
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;
Других решений пока нет …