我写其中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”, 但你可能需要阅读这些常见问题。

http://www.parashift.com/c++ -faq-精简版/ abcs.html#FAQ-22.4

您需要定义用作纯虚函数。要做到这一点,每个声明后添加“= 0”。例如:

virtual void destroyDelayBuffer(void) = 0;

使用纯虚函数:

  virtual int callback( void *outputBuffer, void *notUsed, unsigned int 
       nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData ) = 0;

我想补充上述答案,你不能实例包含纯虚函数的类的对象,所以在未来,如果你打算将你的基类的对象,千万要记得使函数非纯虚。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top