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