Why do abstract class functions require definitions?

Jacob Carlborg via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Sep 16 02:31:24 PDT 2015


On 2015-09-16 10:49, FiveNights wrote:
> Every so often I'll get a compiler error that isn't particularly clear
> on what's wrong and eventually I'll figure out that what's causing it is
> having a function in an abstract class somewhere that isn't defined:
>
> abstract class SomeClass {
>      int someVariable;
>      void someFunction();
> }
> the solution is usually:
> void someFunction(){}
>
> Usually the abstract class is a converted interface, but it turned out
> that I needed to include a variable for it to work out and I just wasn't
> keen on remembering to put a mixin in each derived class.
>
> I'm just wondering why I can't have an undefined function in an abstract
> class? I'd the compiler to say, "Hey, you forgot to put 'someFunction()'
> in 'SomeDerrivedClass', go do something about that." when I end a
> function with a semi-colon in the base class and don't have it in the
> derrived. Everything just seems to break in cryptic ways unless I curly
> brace the function ending.

I'm guessing you see a link error. The reason you see that instead of a 
compile error is because D supports separate compilation. Meaning that 
the method could be implemented in a different library that are resolved 
during link time.

As already answered in another post, the solution is to prefix the 
method declaration with "abstract".

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list