// ABase.h
class ABase {
public:
 typedef std::vector<B> VectorB; // Bは完全型でなくてはいけない?
 virtual VectorB::iterator F(const VectorB& vec)=0;
 ...
}

// B.h
template <...> // テンプレートクラスのため.hと.cppにわけることができない
class B {
public:
 void F() {
  pABase_->...; // ABaseの関数を呼び出す
  ...
 }
private:
 ABase* pABase_;
};

ABaseはBの定義が必要、BはAbaseの定義が必要という状態になってしまい、困っています。
こういった循環参照を避ける手法はないでしょうか?