4

我是 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);
    }
}

应用程序.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

我在这里做错了什么?

4

2 回答 2

5

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

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

现在您可能明白为什么会出现上述编译错误 - 只是 DMD 没有编译 ClassOne.d 文件...

于 2013-10-13T16:18:30.167 回答
3

您可以使用rdmd进行编译。它是 dmd 的包装器,具有一些附加功能,但您仍然可以传递 dmd 参数。主要好处是您只需要指定一个 .d 文件 - 具有 main 功能的文件。它理解导入指令,因此它将包含所有必要的 .d 文件

于 2013-10-14T08:27:22.647 回答