If I understand the question right, you have the following situation
class Base {};
class Derived: public Base {};
class Derived2: public Base {};
void foo(const vector<Derived*>&);
void bar()
{
  vector<Base*> baseVec;
  // Fill baseVec with pointers to Derived objects
  foo(baseVec); // Does not work
}
The problem is that, although Base and Derived are related through inheritance, the types vector<Base*> and vector<Derived*> are completely unrelated. There is no conversion between the two.
Also, there is the additional problem that baseVec could also contain pointers to other derived classes, such as Derived2, and foo can't handle these.
The only real solutions are
- the one outlined in the question: Create a new vector<Derived*>and populate that withdynamic_casted content of the source vector
- avoid having such a type mismatch in the program.