vector<Base*>とvector<Derived*>は無関係なタイプなので、これを行うことはできません。これについては、こちらのC++FAQで説明されています。
変数をaからaに変更し、それにオブジェクトを挿入する必要がvector<Derived*>ありますvector<Base*>。Derived
また、vector不必要にコピーしないように、値ではなくconst-referenceで渡す必要があります。
void BaseFoo( const std::vector<Base*>& vec )
{
...
}
最後に、メモリリークを回避し、コードを例外安全にするために、ヒープに割り当てられたオブジェクトを処理するように設計されたコンテナの使用を検討してください。
#include <boost/ptr_container/ptr_vector.hpp>
boost::ptr_vector<Base> vec;
または、生のポインターを使用する代わりに、スマートポインターを保持するようにベクトルを変更します。
#include <memory>
std::vector< std::shared_ptr<Base*> > vec;
また
#include <boost/shared_ptr.hpp>
std::vector< boost::shared_ptr<Base*> > vec;
いずれの場合も、BaseFooそれに応じて関数を変更する必要があります。