I would like to create an `Animal` interface. The `Cat` class implements it. An animal can eat an another animal `eat(Animal a)`. `Animal.die()` will kill the animal, and `Animal.isDead()` returns, if the animal is dead, or not.

If I would like to compile it, I get some errors:

```
templates may not be 'virtual'
invalid use of incomplete type 'class A'
expected class-name before '{' token

```

I've searched a lot, how to fix this errors. But none of them resolved it. I'm not a `C++` expert. I only have some years of JAVA experience.

Code:

```
#include <iostream>

using namespace std;

//interface
class Animal {

public:
    template<class A extends Animal>
    virtual void eat(A* a) = 0;
    virtual void die() = 0;
    virtual bool isDead() = 0;

};

// Cat class
class Cat: Animal {

private:
    bool dead = false;

public:
    Cat();
    Cat(const Cat& orig);
    virtual ~Cat();

    template<class A extends Animal>
    void eat(A* a);
    void die();
    bool isDead();

};

// Implement cat
Cat::Cat() {
}

Cat::Cat(const Cat& orig) {
}

Cat::~Cat() {
}

template<class A extends Animal>
void Cat::eat(A* a) {
    a->die();
}

void Cat::die() {
    dead = true;
}

bool Cat::isDead() {
    return dead;
}

int main(int argc, char** argv) {

    Cat* cat = new Cat();
    Cat* cat2 = new Cat();

    cat->eat(cat2);

    cout << (cat2->isDead()? "Cat2 is dead" : "Cat2 is not dead") << endl;

    return 0;
}

```