rendered paste body/* Bitcrusher.h */#pragma once#include "dspobject.h"#include "MonoEffect.h"namespace DSP {class Bitcrusher : public MonoEffect{public: Bitcrusher(); ~Bitcrusher(); void processReplacing(float* in, float* out, int sampleFrames); void setSteps(int i) { this->steps = i; }private: int steps;};}/* Bitcrusher.cpp */#include "Bitcrusher.h"using namespace DSP;Bitcrusher::Bitcrusher(): MonoEffect(){}Bitcrusher::~Bitcrusher(void){}void Bitcrusher::processReplacing(float* in, float* out, int sampleFrames){ register int steps = this->steps; for(; sampleFrames; sampleFrames--, out++, in++) { *out = (int) (*in * steps) / (float) steps; }}/* MonoEffect.h */#pragma once#include "DSPObject.h"namespace DSP {class MonoEffect : public DSPObject{public: MonoEffect() : DSPObject(1, 1) { } virtual ~MonoEffect() = 0; virtual void processReplacing(float* in, float* out, int sampleFrames) = 0; void processReplacing(float** ins, float** outs, int sampleFrames) { this->processReplacing(*ins, *outs, sampleFrames); }};}/* DSPObject.h */#pragma oncenamespace DSP {// Represents an abstract processing object class DSPObject{public: DSPObject() { this->numInputs = this->numOutputs = 0; } DSPObject(int numInputs, int numOutputs) { this->numInputs = numInputs; this->numOutputs = numOutputs; } virtual ~DSPObject() {}; // process sampleFrames samples from in[] and put them into out[] // pure virtual - must be overloaded in inheriting class virtual void processReplacing(float** in, float** out, int sampleFrames) = 0; virtual int getNumInputs() { return this->numInputs; } virtual int getNumOutputs() { return this->numOutputs; }protected: int numInputs; int numOutputs;};}/* Error:Error 1 error LNK2019: unresolved external symbol "public: virtual __thiscall DSP::MonoEffect::~MonoEffect(void)" (??1MonoEffect@DSP@@UAE@XZ) referenced in function "public: virtual __thiscall DSP::Bitcrusher::~Bitcrusher(void)" (??1Bitcrusher@DSP@@UAE@XZ) Bitcrusher.obj */