Pregunta

Estoy escribiendo algo de código en el que definen las siguientes clases base.

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);
};

Quiero usar esto como una clase base y en realidad no hacer nada con ella por su propia cuenta. Así que tengo dos clases separadas que se derivan de esta clase Coro. Yo quería hacer esto simplemente proporcionar algunas limitaciones básicas en cuanto a lo que cualquier clase derivada Coro debe tienen que ser considerados utilizables en mi programa.

Cuando construyo mi proyecto (Visual Studio 2008), me sale sin resolver errores de símbolos externos en todas las funciones virtuales de esta clase de coro. Yo supongo que es el error típico en el que no hice hacia adelante declaraciones de estas funciones. Pero, ya que son virtuales y no quieren que se pueden definir realmente a hacer nada hasta que se definen dentro de las clases derivadas, ¿qué debo hacer para resolver este problema?

¿Fue útil?

Solución

Si su intención es para que puedan ser simplemente colocan los titulares de las clases hijas de implementar, a continuación, hacen de ellos las funciones virtuales puras, poniendo fin a = 0. Por ejemplo

virtual void destroyDelayBuffer(void) = 0;

Esto hace que el método "abstracto" por así decirlo. El compilador de C ++ no buscará una definición real de la metodología, sino que obligará a todas las clases derivadas para poner en práctica estos métodos antes de una instancia puede ser creado.

Otros consejos

Es necesario declarar aquellos función virtual pura.

virtual void initializeDelayBuffer (void) = 0;

Esto creara una interfaz de tipo, que es lo que desea.

Esto se llama a una función virtual pura. En C ++ se escribe un "= 0" después de que el nombre de la función, pero es probable que desee leer las preguntas frecuentes sobre las mismas.

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

Es necesario definir las funciones como funciones virtuales puras. Para ello, agregue un "= 0" después de cada declaración. Por ejemplo:

virtual void destroyDelayBuffer(void) = 0;

Utilice una función virtual pura:

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

Sólo para añadir a las respuestas anteriores, no se puede crear una instancia de un objeto de una clase que contiene funciones virtuales puras, por lo que en el futuro si la intención de tener objetos de su clase base, no olvide que la función no virtual pura.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top