Question

J'écris un code où je définissais la classe de base suivante.

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

Je veux l'utiliser comme une classe de base et ne pas faire quoi que ce soit avec elle lui-même. J'ai donc deux classes séparées qui dérivent de cette classe de Chorus. Je voulais le faire pour fournir simplement des contraintes de base quant à ce que toute la classe Chorus dérivée DOIT doivent être considérés utilisables dans mon programme.

Quand je construis mon projet (Visual Studio 2008), je reçois des erreurs de symboles externes non résolues sur toutes les fonctions virtuelles de cette classe Chorus. Je devine que c'est l'erreur typique où je n'ai pas fait avant les déclarations de ces fonctions. Mais, étant donné qu'ils sont virtuels et je ne veux pas à définir réellement faire quoi que ce soit jusqu'à ce qu'ils soient définis dans les classes dérivées, que dois-je faire pour résoudre ce problème?

Était-ce utile?

La solution

Si votre intention est pour eux d'être simplement placer des supports pour les classes d'enfants à mettre en œuvre, puis en font des fonctions virtuelles pures en terminant avec = 0. Par exemple

virtual void destroyDelayBuffer(void) = 0;

Cela rend la méthode « abstraite » pour ainsi dire. Le compilateur C de ne cherchera pas une définition réelle de la méthode mais forcera toutes les classes dérivées à mettre en œuvre ces méthodes avant une instance peut être créée.

Autres conseils

Vous devez déclarer les fonction virtuelle pure.

virtual void initializeDelayBuffer (void) = 0;

Cela crée une interface de toutes sortes, qui est ce que vous voulez.

Ceci est appelé une fonction virtuelle pure. En C ++ vous écrivez un « = 0 » après le nom de la fonction, mais vous voulez probablement lire la FAQ sur ces derniers.

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

Vous devez définir les fonctions de fonctions virtuelles pures. Pour ce faire, ajoutez un « = 0 » après chaque déclaration. Par exemple:

virtual void destroyDelayBuffer(void) = 0;

A l'aide d'une fonction virtuelle pure:

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

Il suffit d'ajouter les réponses ci-dessus, vous ne pouvez pas instancier un objet d'une classe contenant des fonctions virtuelles pures, à l'avenir si vous avez l'intention d'avoir des objets de votre classe de base, n'oubliez pas de faire la fonction non virtuelle pure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top