Class template cannot be constructed
Why do I get a compilation message error ''SeeAndSay::AnimalWrapper': class template cannot be constructed'? Thanks in advance!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
#include <iostream>
#include <vector>
class Animal
{
public:
virtual const char* see() const = 0;
virtual const char* say() const = 0;
};
class Cow : public Animal
{
public:
const char* see() const { return "cow"; }
const char* say() const { return "moo"; }
};
class Pig : public Animal
{
public:
const char* see() const { return "pig"; }
const char* say() const { return "oink"; }
};
class Dog : public Animal
{
public:
const char* see() const { return "dog"; }
const char* say() const { return "woof"; }
};
class SeeAndSay
{
public:
// The interface
class MyAnimal
{
public:
virtual const char* getAnimalName() const = 0;
virtual const char* getAnimalSound() const = 0;
};
// The derived type(s)
template <typename T>
class AnimalWrapper : public MyAnimal
{
const T* m_animal;
public:
AnimalWrapper(const T* animal)
: m_animal(animal)
{ }
const char* getAnimalName() const
{
return m_animal->see();
}
const char* getAnimalSound() const
{
return m_animal->say();
}
};
// Registered animals
std::vector<MyAnimal*> m_animals;
public:
template <typename T>
void addAnimal(T* animal)
{
m_animals.push_back(new AnimalWrapper(animal));
}
void pullTheString()
{
size_t index = rand() % m_animals.size();
MyAnimal* animal = m_animals[index];
printf("The %s says '%s!'",
animal->getAnimalName(),
animal->getAnimalSound());
}
};
int main()
{
SeeAndSay ss;
Dog dog;
ss.addAnimal(&dog);
ss.pullTheString();
}
| |
Last edited on
m_animals.push_back(new AnimalWrapper<T>(animal));
Last edited on
Topic archived. No new replies allowed.