I'm facing a problem using forward declaration, and I don't know how to fix it. Here's my files:
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_    
when I compile, it says around pSamplwhk->pPianoRoll->Start();:
use of undefined type 'IPianoRoll'
left of '->Start' must point to class/struct/union/generic type
VS2015 find each element writing the code (I've no problem), it happens only when I compile (Build).
Why? I pass BubblePlug and I do forward of both IPianoRoll and IMidiEngine, including them in order (on BubblePlug.cpp). 
IMidiEngine should know everythings about IPianoRoll (which it is included first).
At least, I should have problem at "runtime", why at compile?
Can you help me to understand the problem and how to fix it? Thanks.
 
    