On Saturday, 4 October 2014 at 04:02:46 UTC, eles wrote:
On Friday, 3 October 2014 at 15:47:33 UTC, John Colvin wrote:
On Friday, 3 October 2014 at 15:44:16 UTC, eles wrote:
class ShapeSurface(T) {
public:
        int formula();

that means you have a definition of formula elsewhere (which the linker tries to find, but obviously fails. What you want is

class ShapeSurface(T) {
public:
        abstract int formula();

Thanks, but still. The compiler shall not let that code pass down to the linker. It has everything it needs to not do that, or it shall have. Linker errors shall be simply because the libraries are not in place (either not installed, either linking path not correctly configured, either broken versions of those libraries).

Sorry, but that's just not how it works. There is no requirement for the definition of a function to be found in the same compilation unit as it's declaration.

// a.d
void foo();
void main() { foo(); }

// b.d
import std.stdio;
void foo() { writeln("Hello World"); }

$ ls
a.d     b.d

$ dmd b.d -c

$ ls
a.d     b.d     b.o

$ dmd a.d b.o

$ ls
a       a.d     a.o     b.d     b.o

$ ./a
Hello World


So the compiler has no way of knowing whether you've forgotten to include a definition, or whether it's simply sitting in some other object file / library / whatever. The linker, however, can know, hence the linker error.

Reply via email to