代码之家  ›  专栏  ›  技术社区  ›  quakkels

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

d
  •  4
  • quakkels  · 技术社区  · 12 年前

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

    项目结构:

    DlangApp/app.d
    DlangApp/ClassOne.d
    

    一级.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
    

    我在这里做错了什么?

    2 回复  |  直到 12 年前
        1
  •  5
  •   DejanLekic    12 年前

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

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

    现在您可能已经理解了为什么会出现上面的编译错误了——只是DMD没有编译ClassOne.d文件。。。

        2
  •  3
  •   Michal Minich    12 年前

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