Yeah sorry I meant to drop the void.  (didn't you too?)

Do you say new ScopesGeneric() anywhere?  That's what it means - somwehere you try and instantiated the abstract object.  You can leave off the = 0 for testing the cloning suggestions.  The = 0 instead of {}; is to say this object should not be created directly and children are expected to override those methods.