4

次の2つのファイルをリンクすると、リンクエラーが発生します。

広告:

import std.stdio;

extern string test ();

void main() {
    writeln(test());
    readln();
}

bd:

string test () {
    return "hello";
}

私が得るエラーは次のとおりです。

Error 42: Symbol Undefined _D1a4testFZAya`

---errorlevel 1

なにが問題ですか ?

__ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _

編集:これはそれを行う正しい方法です:

広告:

import std.stdio;
import b;

void main() {
   writeln("some_var from Module b: \"", b.some_var, "\"");
}

bd:

public string some_var = "Hello, world!";

//you can also use static module constructors to set your vars
static this() {
   some_var ~= " -- How are you?";
}

そのコードは、digitalmars.comサイトの初心者向けの優れたDフォーラムでJoshuaReuschから提供されました。

4

1 に答える 1

4

次のように変更しますa.d

import std.stdio;
import b;

//extern string test ();

void main() {
  writeln(test());
  readln();
}

externリンケージ属性であり、ほとんどの場合、特定の関数 (通常はライブラリ内の C 関数) に使用する呼び出し規約を指定するために使用されます。詳細externおよびその他の属性については、http: //www.d-programming-language.org/attribute.html を参照してください。D ソース ファイルしかない場合は、extern は必要ありません。ただし、C または C++ と D コードを混在させる場合は、必ずそれを使用する必要があります。

于 2011-12-26T00:34:29.990 に答える