Je suis confronté à un problème d'utilisation de la déclaration forward, et je ne sais pas comment y remédier. Voici mes fichiers:Compilez l'heure "null" en utilisant la déclaration avant?
BubblePlug.h
#ifndef _BUBBLEPLUG_
#define _BUBBLEPLUG_
#include "IPlug_include_in_plug_hdr.h"
#include "resource.h"
#include "IControl.h"
class IPianoRoll;
class IMidiEngine;
class BubblePlug: public IPlug
{
private:
public:
IMidiEngine *pMidiEngine;
IPianoRoll *pPianoRoll;
BubblePlug(IPlugInstanceInfo instanceInfo);
~BubblePlug();
};
#endif // !_BUBBLEPLUG_
BubblePlug.cpp
#include "BubblePlug.h"
#include "IPlug_include_in_plug_src.h"
#include "IPianoRoll.h"
#include "IMidiEngine.h"
BubblePlug::BubblePlug(IPlugInstanceInfo instanceInfo) : IPLUG_CTOR(10, 1, instanceInfo) {
pPianoRoll = new IPianoRoll(this, 8, 8);
pMidiEngine = new IMidiEngine(this);
}
BubblePlug::~BubblePlug() {
delete pPianoRoll;
delete pMidiEngine;
}
IPianoRoll.h
#ifndef _IPIANOROLL_
#define _IPIANOROLL_
#include "IMidiEngine.h"
class IPianoRoll : public IControl
{
private:
BubblePlug *pBubblePlug;
public:
IPianoRoll(BubblePlug *bubbleplug, int x, int y) : IControl(bubbleplug, IRECT(x, y, x + 10, y + 10)), pBubblePlug(bubbleplug) {
}
~IPianoRoll() {
};
bool Draw(IGraphics *pGraphics) {
return true;
}
void Random(bool onlyScore = false) {
pBubblePlug->pMidiEngine->Init();
}
void Start() {
}
};
#endif // !_IPIANOROLL_
IMidiEngine.h
#ifndef _IMIDIENGINE_
#define _IMIDIENGINE_
class IMidiEngine
{
private:
BubblePlug *pBubblePlug;
public:
IMidiEngine(BubblePlug *bubbleplug) : pBubblePlug(bubbleplug) {
}
~IMidiEngine() {
};
void Init(bool randomScore = true) {
pSamplwhk->pPianoRoll->Start();
}
};
#endif // !_IMIDIENGINE_
quand je compile, il est dit autour pSamplwhk->pPianoRoll->Start();
:
use of undefined type 'IPianoRoll'
left of '->Start' must point to class/struct/union/generic type
VS2015 trouver chaque élément écriture du code (je n'ai pas de problème), il arrive seulement quand je compile (Build).
Pourquoi? Je passe BubblePlug
et je fais en avant de tous les deux IPianoRoll
et IMidiEngine
, en les incluant dans l'ordre (sur BubblePlug.cpp
).
IMidiEngine
devrait savoir tout ce qui concerne IPianoRoll
(qui est inclus en premier).
Au moins, je devrais avoir un problème à "runtime", pourquoi à la compilation?
Pouvez-vous m'aider à comprendre le problème et comment y remédier? Merci.
Essayez d'ajouter '#include" IMidiEngine.h "' à IPianoRoll.h – alexeykuzmin0
@ alexeykuzmin0: J'ai modifié la question. Vérifiez-le! – markzzz
Sans rapport: Vos gardes d'inclusion sont illégaux. https://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier –