It's perfectly reasonable, and sometimes desirable to have non-virtual methods in an abstract base class; just because it's an abstract class doesn't necessarily mean every part of it should be usable polymorphically.
For example, you might want to use the 'Non virtual polymorphism' idiom, whereby a function is called polymorphically from a non-virtual member function, in order to ensure that certain preconditions or postconditions are met before the virtual function is called
class MyAbstractBaseClass
{
protected:
virtual void OverrideMe(); = 0;
public:
void CallMeFirst();
void CallMe()
{
CallMeFirst();
OverrideMe();
}
};