初学者C ++:在基类虚函数
-
05-09-2019 - |
题
我写其中I中定义的以下基类一些代码。
class Chorus{
public:
//Destructor
virtual ~Chorus();
//callback function
virtual int callback( void *outputBuffer, void *notUsed, unsigned int
nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData );
virtual void initializeDelayBuffer(void);
virtual void destroyDelayBuffer(void);
};
我想用这个作为一个基类,实际上没有做任何与它自身。所以我有一个从这个类派生合唱两个单独的类。我想这样做是为了简单地提供一些基本的约束条件,以什么任何派生类合唱的必须的都被认为是在我的程序中使用。
当我建立我的项目(Visual Studio 2008中),我得到这个合唱类的所有虚函数解析的外部符号错误。我猜这是典型的错误,我没有让着这些函数的声明。但是,因为它们是虚拟的,我不希望他们实际上被定义为做任何事情,直到他们的派生类,我该怎么办来解决这个问题中定义的?
解决方案
如果您的目的是为他们简单地占位子类来实现,然后通过用= 0例如结束使其纯虚函数
virtual void destroyDelayBuffer(void) = 0;
这使得该方法“抽象”可以这么说。 C ++编译器将不寻找该方法的实际定义,而是将迫使所有派生类来实现这些方法可以创建一个实例之前。
其他提示
您需要声明的那些功能作为纯虚
虚拟无效initializeDelayBuffer(无效)= 0;
这将创造各种各样的接口,这是你想要的东西。
此被称为纯虚函数。 在C ++编写一个函数名后“= 0”, 但你可能需要阅读这些常见问题。
您需要定义用作纯虚函数。要做到这一点,每个声明后添加“= 0”。例如:
virtual void destroyDelayBuffer(void) = 0;
使用纯虚函数:
virtual int callback( void *outputBuffer, void *notUsed, unsigned int
nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData ) = 0;
我想补充上述答案,你不能实例包含纯虚函数的类的对象,所以在未来,如果你打算将你的基类的对象,千万要记得使函数非纯虚。
不隶属于 StackOverflow