4

链接以下两个文件会给我一个链接错误:

广告:

import std.stdio;

extern string test ();

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

乙:

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, "\"");
}

乙:

public string some_var = "Hello, world!";

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

该代码由Joshua Reusch在digitalmars.com 网站上为初学者提供的优秀 D 论坛中提供。

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 回答