我是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
我在这里做错了什么?
答案 0 :(得分: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文件...
答案 1 :(得分:3)
您可以使用 rdmd 进行编译。它是dmd的一个包装器,带有一些额外的功能,但你仍然可以使用dmd参数。主要的好处是你只需要指定一个.d文件 - 具有main函数的文件。它了解import指令,因此它将包含所有必需的.d文件