Je veux un vecteur de pointeurs de classe dérivés comme pointeurs de classe de base

En C++, la classe vector stocke un tableau d'objets. Dans ce cas, je suis de stocker des pointeurs vers des dérivés de la classe d'objets (les Chiens). À un certain point, je veux traiter ce vecteur de pointeurs vers des objets de la classe de base (les Animaux). C'est le "droit"/non controversée? Pourquoi ne puis-je pas le faire?

#include <vector>
using namespace std;

class Animal { }; 
class Dog : public Animal { };

int main(int argc, char *argv[]) {
    vector<Dog*> dogs;
    dogs.push_back(new Dog());
    dogs.push_back(new Dog());
    vector<Animal*> animals = dogs; //This doesn't seem to work.

    //This is really what I want to do...
    vector<Animal*> all_animals[] = {dogs, cats, birds};
}

L'erreur:

Untitled.cpp:11:18: error: no viable conversion from 'vector<class Dog *>' to 'vector<class Animal *>'
    vector<Animal*> animals = dogs;
                    ^         ~~~~
/usr/include/c++/4.2.1/bits/stl_vector.h:231:7: note: candidate constructor not viable: no known conversion from 'vector<Dog *>' to 'const std::vector<Animal *, std::allocator<Animal *> > &' for 1st argument
  vector(const vector& __x)
  ^

source d'informationauteur SharkCop