如何从D中的不同源文件导入类?

时间:2013-10-13 15:30:10

标签: d

我是D语言的新手。我试图导入我的自定义类以在main()函数中使用。

项目结构:

DlangApp/app.d
DlangApp/ClassOne.d

ClassOne.d:

import std.stdio;

class ClassOne
{
    string firstName;
    string lastName;

    this(string first, string last)
    {
        firstName = first;
        lastName = last;
    }

    void writeName()
    {
        writefln("The name is: %s %s", firstName, lastName);
    }
}

app.d:

import std.stdio;
import ClassOne;

void main()
{
    auto aNumber = 10;
    auto aString = "This is a string.";
    writefln("A string: %s\nA number: %s", aString, aNumber);
}

当我运行dmd -run app.d时,收到以下错误消息:

app.obj(app)
 Error 42: Symbol Undefined _D8ClassOne12__ModuleInfoZ
---errorlevel 1

我在这里做错了什么?

2 个答案:

答案 0 :(得分:5)

执行dmd -ofquakkels_app app.d ClassOne.d,如果编译成功,您将获得quakkels_app可执行文件。

或者,如果您确实想使用-run <file> [args...]参数:dmd ClassOne.d -run app.d。请注意,我将-run放在最后 - 因为在 -run filename 之后,您可能想要将一些参数传递给您的应用程序。

现在你可能理解为什么你上面有编译错误 - 只是DMD没有编译ClassOne.d文件...

答案 1 :(得分:3)

您可以使用 rdmd 进行编译。它是dmd的一个包装器,带有一些额外的功能,但你仍然可以使用dmd参数。主要的好处是你只需要指定一个.d文件 - 具有main函数的文件。它了解import指令,因此它将包含所有必需的.d文件