On Friday, 28 February 2014 at 20:54:42 UTC, Robin wrote:
Hiho,
with
import neoLab.core.Matrix;
abstract class ElementalOperation(T = double) {
abstract void opCall(ref Matrix!T m);
abstract override string toString();
}
where I have made the abstract class templated "(T = double)"
and where I have added a "!T" after "Matrix" in the opCall
parameter list I get the following error:
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/../../../../lib/crt1.o:
In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
--- errorlevel 1
The error message is unrelated. "undefined reference to `main'"
-> no main function. You can add -main to your dmd invocation to
let the compiler generate a dummy main.
When I leave the (T = double) template assignment out I get
another error:
neoLab/core/ElementalOperation.d(6): Error: undefined
identifier T
Well, sure, you just removed T.
With Tobias Pankrath's Matrix!() I get the following linker
error:
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/../../../../lib/crt1.o:
In function `_start':
(.text+0x20): undefined reference to `main'
Same as above: no main function.
ScaleRowOperation.o: In function
.... many many many lines of unuseful error messages ...
(.text._D6neoLab4core6Matrix11__T6MatrixZ6Matrix6randomFxmxmdddZS6neoLab4core6Matrix11__T6MatrixZ6Matrix+0x145):
undefined reference to
`_D6neoLab4core9Dimension9Dimension4sizeMxFNaNbNdZm'
collect2: error: ld returned 1 exit status
--- errorlevel 1
Can't say much about this. Might just be fallout from previous
failures.
So, in conclusion. I still have no clue why this more or less
simple construct does not work but gives me errors on compiling.
Matrix!T is the way to go.