Pointers to member functions using virtual methods
I'm working my way through SAMS Teach Yourself C++ in 21 Days Third Edition. But I have ran into a problem.
When I try to compile this with Dev-C++ 4.9.9.2 I get an error message. I've tried compiling the code from the book and code on the CD, but both have the same result.
Code:
C:\Documents and Settings\Will\My Documents\My C++\Sams Teach Yourself\Week 2\Day 14\14.10\List1410.cpp In function `int main()':
67 C:\Documents and Settings\Will\My Documents\My C++\Sams Teach Yourself\Week 2\Day 14\14.10\List1410.cpp invalid use of non-static member function `virtual void Mammal::Speak() const'
67 C:\Documents and Settings\Will\My Documents\My C++\Sams Teach Yourself\Week 2\Day 14\14.10\List1410.cpp cannot convert `void (Mammal::)() const' to `void (Mammal::*)() const' in assignment
68 C:\Documents and Settings\Will\My Documents\My C++\Sams Teach Yourself\Week 2\Day 14\14.10\List1410.cpp invalid use of non-static member function `virtual void Mammal::Move() const'
68 C:\Documents and Settings\Will\My Documents\My C++\Sams Teach Yourself\Week 2\Day 14\14.10\List1410.cpp cannot convert `void (Mammal::)() const' to `void (Mammal::*)() const' in assignment
Lines 67 and 68 are the following, right at the end of the program.
Code:
case 1: pFunc = Mammal::Speak; break;
default: pFunc = Mammal::Move; break;
Code:
//Listing 14.10 Pointers to member functions using virtual methods
#include <iostream>
using namespace std;
class Mammal
{
public:
Mammal():itsAge(1) { }
virtual ~Mammal() { }
virtual void Speak() const = 0;
virtual void Move() const = 0;
protected:
int itsAge;
};
class Dog : public Mammal
{
public:
void Speak()const { cout << "Woof!\n"; }
void Move() const { cout << "Walking to heel...\n"; }
};
class Cat : public Mammal
{
public:
void Speak()const { cout << "Meow!\n"; }
void Move() const { cout << "slinking...\n"; }
};
class Horse : public Mammal
{
public:
void Speak()const { cout << "Winnie!\n"; }
void Move() const { cout << "Galloping...\n"; }
};
int main()
{
void (Mammal::*pFunc)() const =0;
Mammal* ptr =0;
int Animal;
int Method;
bool fQuit = false;
while (fQuit == false)
{
cout << "(0)Quit (1)dog (2)cat (3)horse: ";
cin >> Animal;
switch (Animal)
{
case 1: ptr = new Dog; break;
case 2: ptr = new Cat; break;
case 3: ptr = new Horse; break;
default: fQuit = true; break;
}
if (fQuit)
break;
cout << "(1)Speak (2)Move: ";
cin >> Method;
switch (Method)
{
case 1: pFunc = Mammal::Speak; break;
default: pFunc = Mammal::Move; break;
}
(ptr->*pFunc)();
delete ptr;
}
return 0;
}
I would be thankful for any help.