Please check these lines:
__interface IAnimal
{
void Release(void);
};
__interface ICat : public IAnimal
{
void DrinkMilk(void);
};
class Animal : public IAnimal
{
public:
Animal(void){}
virtual~Animal(void){}
void Release(void){delete this;}
};
class Cat : public ICat, public Animal
{
public:
Cat(void){}
~Cat(void){}
void DrinkMilk(void){}
//void Release(void){Animal::Release();}
};
As you see “Cat” is derived from “Animal” and “IAnimal”, so all pure virtual members of “IAnimal” are implemented. But compiler (VS 2010) says “Cat” is abstract due to “Release” method. But its defined in “Animal” and “Cat” receives it. If I uncomment the last line(in other words implement the “Release” method again), problem will be solved. Of course I don’t want to rewrite all base methods again in my derived classes.
Any Idea?
Thank you in advance.






