ok so I've come to the casting section of my book, and I've read and read, and this set of code seems to be right, all it says is that it can't convert down through the classes.

Main.cpp
Code:
#include <iostream>
#include <j:\Aaron's Documents\Visual Studio 2008\Projects\Trying the classes again\Trying the classes again\Animals.h>
;
using namespace std;

int main()
{
	Animal Fido;
	Dog pFido = static_cast<Dog>(Fido); // casting, is it in the right format?
	*pFido.play();
	
	system("PAUSE");
	return 0;
}
and

Classes.h
Code:
class Animal
{
	public:
		Animal()  //Class to be cast from...
		{ 
			std::cout << "Creating Creature.\n";
		};
		~Animal()
		{
			std::cout << "Destroying Creature.\n";
		};
		int Age;
		void
			GetAge()
		{
			std::cout << "Creature is " << Age << " years old.\n";
		};
		void SetAge(int age)
		{
			Age = age;
		};
		void play()
		{
			std::cout << "Playing with Creature.\n";
		};
};

class Fish : public Animal
{
public:
	Fish()
	{
		std::cout << "Adding Fins, Gills, Scales.\n";
	};
	~Fish()
	{
		std::cout << "Removing Fins, Gills, Scales.\n";
	};

	void Swim(int sdist)
	{
		std::cout << "Fish swims " << sdist << " yards.\n";
	};

	void Float()
	{
		std::cout << "Fish remains floating.\n";
	};
};
class Mammal : public Animal
{
public:
	Mammal()
	{
		std::cout << "Adding Fur and Milk.\n";
	};
	~Mammal()
	{
		std::cout << "Removing Fur and Milk.\n";
	};
	
	void rubfur()
	{
		std::cout << "Rubbing Fur.\n";
	};
};

class Dog : public Mammal // class to be cast to...
{
public:
	Dog()
	{
		std::cout << "Creating Dog.\n";
	};
	~Dog()
	{
		std::cout << "Destroying Dog.\n";
	};
	void run(int feet)
	{
		std::cout << "Dog runs " << feet << " feet.\n";
	};

	void play()
	{
		std::cout << "Playing with Dog.\n";
	};
}
and errors:
1.error C2440: 'static_cast' : cannot convert from 'Animal' to 'Dog'
1>No constructor could take the source type, or constructor overload resolution was ambiguous
2.main.cpp(Line 10) : error C2100: illegal indirection

the first one seems pretty straightforward, but I don't know why it's saying it, what does it mean by "the constructor overload was ambiguous" , does it mean that it's trying to using two different constructors at once?

Can someone tell me what it means?