On Saturday, 4 October 2014 at 10:27:18 UTC, John Colvin wrote:
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
This seem to allow an entire class of problems, by linking
against long-time forgotten functions...