This isn't an actual programming question, I just need advice on how to structure a part of my program.
The program is divided into a client and a server part. Both share certain code, including base classes. Here's a representation of the code I'm having trouble with:
Shared classes:
class BaseEntity
{
public:
    virtual void EmitSound(std::string snd) {}
    virtual bool IsPlayer() {return false;}
};
class BasePlayer
    : public BaseEntity
{
public:
    bool IsPlayer() {return true;}
}
Serverside classes:
class Entity
    : public BaseEntity
{
public:
    void EmitSound(std::string snd)
    {
        // Serverside implementation
    }
}
class Player
    : public Entity,BasePlayer
{
public:
    void Kick() {}
}
Clientside classes:
class CEntity
    : public BaseEntity
{
public:
    void EmitSound(std::string snd)
    {
        // Clientside implementation
    }
};
class CPlayer
    : public CEntity,BasePlayer
{
public:
    void SetFOV() {}
}
(The methods are just examples)
The class 'Player' should inherit all members from both 'Entity' and 'BasePlayer'. This doesn't work however, since both have the same parent class (BaseEntity).
I could of course remove the inheritance from 'BasePlayer' but then I'd end up with two 'IsPlayer' functions, each returning something different.
I could also move all members from 'BasePlayer' into 'Player' and 'CPlayer' respectively, but that'd lead to redundancy I'd like to avoid and I'd no longer be able to use a single pointer for objects of either class while keeping access to all shared methods.
I don't like either of these solutions, but I can't think of anything else. Is there an optimal solution to this problem?