本当だ、なんだこれは…。申し訳ないです、元はこんなのでした。
class Hoge{ //Hoge.h--------------------------------
 HogeState* state;
public:
 Hoge(){ state = new HogeState; }
 void changeState( HogeState* new_state ){ delete state; state = new_state; }
 void foo(){ state->foo( this ); }
 void foo2(){ state->foo2( this ); }
};
class Hoge; //HogeState.h---------------------------
class HogeState{
 int ahe;
public:
 void foo( Hoge* hoge );
 void foo2( Hoge* hoge );
};
#include "HogeState.h" //HogeState.cpp---------------
#include "Hoge.h"
void HogeState::foo( Hoge* hoge ){
 hoge->changeState( new HogeState );
 ahe = 777;
}
void HogeState::foo2( Hoge* hoge ){
 ahe = 888;
 hoge->changeState( new HogeState );
}
#include "HogeState.h" //main.cpp--------------------
#include "Hoge.h"
int main(){
 Hoge hoge;
 hoge.foo(); hoge.foo2();
}