To avoid some linking errors
Walter Bright
newshound2 at digitalmars.com
Mon Oct 29 15:07:11 PDT 2012
On 10/29/2012 2:28 PM, Jesse Phillips wrote:
> On Sunday, 28 October 2012 at 13:39:26 UTC, bearophile wrote:
>> This code compiles with no errors, and then later the linker gives a "Symbol
>> Undefined":
>>
>>
>> abstract class A {
>> public void foo();
>> }
>> class B : A {}
>> void main() {}
>
> Interestingly, adding abstract to the method will result in no linker error for
> compiling.
That's because by saying "abstract" you're telling the compiler that there is no
implementation for A.foo(), which is fundamentally different from saying that
A.foo() is defined elsewhere. The compiler inserts a 0 in the vtbl[] slot for
it, even though it won't let you try to call it.
> And if a new B is created then a compiler error is provided instead
> of a linker error.
Abstract types are really a different thing from "it's defined somewhere else."
> I'm for getting some line numbers over the less informative linker error.
The object file format does not support line numbers for symbol references and
definitions. None of the 4 supported ones (OMF, ELF, Mach-O, MsCoff) have that.
Even the symbolic debug info doesn't have line numbers for references, just for
definitions.
More information about the Digitalmars-d
mailing list