Hello everyone, A probably stupid but I-can't-find-the-solution-with-Google problem.
I'm trying to compile a small project I'm working on to learn D, called 'dregs'. It's just 3 files for now (2 modules plus a little test program). Unfortunately every time I try and compile, I get 'undefined reference' errors for the classes/structs in the modules. Here are the files: // reputation.d module dregs.reputation; struct rating { uint u; // user ID uint o; // object ID double r; // rating value } class reputation { this() { } this(ref rating[] ratings, ref double[] reputation_user, ref double[] reputation_object) { } } // END // avg.d module dregs.avg; public import dregs.reputation; class avg_weighted : reputation { double[] weight_sum; this(){} this(ref rating[] ratings, ref double[] reputation_user, ref double[] reputation_object) { weight_sum.length = reputation_object.length; foreach(r; ratings) { reputation_object[r.o] += r.r; weight_sum[r.o] += reputation_user[r.u]; } foreach(o, r; reputation_object) r /= weight_sum[o]; } void opCall(ref rating[] ratings, ref double[] reputation_user, ref double[] reputation_object); } class avg_arithmetic : avg_weighted { this(ref rating[] ratings, ref double[] reputation_user, ref double[] reputation_object) { foreach(r; reputation_user) r = 1; super(ratings,reputation_user,reputation_object); } void something(ref dregs.reputation.rating[] ratings, ref double[] reputation_user, ref double[] reputation_object) { avg_weighted(ratings,reputation_user,reputation_object); } } // END // test.d import std.stdio; import dregs.reputation; import dregs.avg; void main() { rating[] r; double[] reputation_user; double[] reputation_object; reputation_user.length = 999; reputation_object.length = 1; foreach(u;0..reputation_user.length) { rating _r = {u,0,(u%3)}; r ~= _r; } } // END I'm running dmd 2.042 on Ubuntu 9.10. dmd -O -I../ test.d avg.d reputation.d ... produces the following errors: ------------------------------------ test.o:(.rodata+0x98): undefined reference to `_D5dregs3avg12avg_weighted6opCallMFKAS5dregs10reputation6ratingKAdKAdZv' test.o:(.rodata+0xf8): undefined reference to `_D5dregs3avg12avg_weighted6opCallMFKAS5dregs10reputation6ratingKAdKAdZv' test.o: In function `_D5dregs3avg14avg_arithmetic9somethingMFKAS5dregs10reputation6ratingKAdKAdZv': reputation.d:(.text._D5dregs3avg14avg_arithmetic9somethingMFKAS5dregs10reputation6ratingKAdKAdZv+0x1b): undefined reference to `_D5dregs3avg12avg_weighted6opCallMFKAS5dregs10reputation6ratingKAdKAdZv' collect2: ld returned 1 exit status --- errorlevel 1 ------------------------------------ This surely is something very basic, but I couldn't find a reason for it in my search of the archives ... :-( Can anyone advise what I'm doing wrong? Thanks & best wishes, -- Joe