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.