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

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

ここで何が間違っていますか?

4

2 に答える 2

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 ファイルをコンパイルしなかっただけです...

于 2013-10-13T16:18:30.167 に答える
3

rdmdを使用してコンパイルできます。これは、いくつかの追加機能を備えた dmd のラッパーですが、dmd 引数を渡すこともできます。主な利点は、1 つの .d ファイル (main 関数を含むファイル) のみを指定する必要があることです。インポート ディレクティブを理解するので、必要なすべての .d ファイルが含まれます。

于 2013-10-14T08:27:22.647 に答える