Thread overview
How to compile and use an external class
Dec 02, 2008
Some Guy
Dec 02, 2008
Lars Kyllingstad
Dec 02, 2008
Some Guy
Dec 02, 2008
bearophile
Dec 02, 2008
Derek Parnell
December 02, 2008
I am busy learning D and I want to be able to use classes now. I am used to programming in C# where it does everything for you and you don't have to think about this kind of thing so I now have no idea how to compile a program from the command line that uses a class in another source file.

I have a source file called MyProgram.d which contains the main program and I have a file called MyClass.d that contains a class called MyClass. I want to be able to create an instance of MyClass in the main program but I don't know what to type to compile it the command line. This is what I have tried so far which doesn't work:

dmd MyProgram.d MyClass.d

Thanks in advance for your help.
December 02, 2008
Some Guy wrote:
> I am busy learning D and I want to be able to use classes now. I am
> used to programming in C# where it does everything for you and you
> don't have to think about this kind of thing so I now have no idea
> how to compile a program from the command line that uses a class in
> another source file.
> 
> I have a source file called MyProgram.d which contains the main
> program and I have a file called MyClass.d that contains a class
> called MyClass. I want to be able to create an instance of MyClass in
> the main program but I don't know what to type to compile it the
> command line. This is what I have tried so far which doesn't work:
> 
> dmd MyProgram.d MyClass.d
> 
> Thanks in advance for your help.

What error message are you getting? Did you remember to put module and import statements in your source files?

MyClass.d:

    module MyClass;

    class MyClass
    {
       ...
    }

MyProgram.d:

    module MyProgram;
    import MyClass;

    void main()
    {
        MyClass m = new MyClass;    // Example
        ...
    }

    ...

(The module statement in MyProgram.d isn't strictly necessary in this case, but personally I think it's good form to always declare the name of a module.)

-Lars
December 02, 2008
Thank you for your help. The problem was that I didn't know that you had to use the import statement to be able to use a class in another source file.
December 02, 2008
Some Guy:
> I am busy learning D and I want to be able to use classes now. I am used to programming in C# where it does everything for you and you don't have to think about this kind of thing so I now have no idea how to compile a program from the command line that uses a class in another source file.

The good thing of D is that with just a little push it can become as handy as C# in this regard :-) The LDC compiler may grow the ability to find and load modules by itself.
In the meantime you can use a tool like "bud" (or another one named rebuild) to do that for you. This is bud:
http://www.dsource.org/projects/build/wiki

Bye,
bearophile
December 02, 2008
On Tue, 2 Dec 2008 09:28:53 +0000 (UTC), Some Guy wrote:

> I am busy learning D and I want to be able to use classes now. I am used to programming in C# where it does everything for you and you don't have to think about this kind of thing so I now have no idea how to compile a program from the command line that uses a class in another source file.
> 
> I have a source file called MyProgram.d which contains the main program and I have a file called MyClass.d that contains a class called MyClass. I want to be able to create an instance of MyClass in the main program but I don't know what to type to compile it the command line. This is what I have tried so far which doesn't work:
> 
> dmd MyProgram.d MyClass.d
> 
> Thanks in advance for your help.

Seeing that you didn't show us your code, I took the liberty of writing some example code...

---------- myprogram.d ---------
module myprogram;

// Tell the compiler that this file needs to know
// about what is in the file 'myclass.d'
import myclass;

import std.stdio;    // Need this to use writefln();

void main()
{
    // Create an instance of the class.
    MyClass inst = new MyClass();

    // Invoke a method in the instance.
    writefln("First %s", inst.A_Method());


    // Create another instance of the class.
    MyClass yai = new MyClass(5);

    // Invoke a method in the instance.
    writefln("Second %s", yai.A_Method());
}
--------- end of file -------------


---------- myclass.d ---------
module myclass;
class MyClass
{
    int SomeAttribute;
    // A class constructor
    this()
    {
        SomeAttribute = 1;
    }

    // Another class constructor
    this(int InitData)
    {
        SomeAttribute = InitData;
    }


    // A method
    int A_Method()
    {
        return SomeAttribute;
    }

}
--------- end of file -------------


The line to compile these ...

   dmd myprogram myclass

When running the program 'myprogram' you should get ...

c:\>myprogram
First 1
Second 5

-- 
Derek Parnell
Melbourne, Australia
skype: derek.j.parnell