如何解决package.d 有问题
我在使用 D 的 package.d
功能时遇到问题。我有我的 package.d
文件:
module dew;
public
import dew.util;
然后我有util.d
:
module dew.util;
struct Size
{
int width;
int height;
}
当我尝试在另一个项目中使用它时,它给了我这个错误: 我知道这应该有效,因为 GitHub 上的项目使用它,特别是 bindbc-sdl。
解决方法
您的代码是正确的。根据错误消息,我假设您使用 DUB 的项目布局可能如下所示:
- 露水/
- dub.sdl/dub.json
- 来源/
- package.d
- util.d
然而,这是不正确的。默认情况下,DUB 仅使用导入文件夹而不是指定所有输入源文件,因此编译器会尝试从文件系统中的导入路径中发现文件。编译器转储了它在您的错误屏幕截图中搜索的导入路径。
相当于现在正在做的粗略编译器是(见dub -v
)
dmd source/app.d -Isource -I../dew/source
您需要想象其中写入的路径对编译器是不可见的,因此 dew/source/ 路径只是编译器无法解释的一些不透明字符串。现在,编译器在其搜索路径中看到的只是 package.d 和 util.d。但是,对于从文件夹导入功能,它们需要与文件系统布局相对应,即您需要有一个名为 dew
的文件夹,您的文件存储在其中。
因此名为 dew.util
的模块将对应于 dew/util.d
而您的包裹 dew
将对应于 dew/package.d
所以对于您的配音项目,这意味着您需要将所有源文件移动到
- 露水/
- dub.sdl/dub.json
- 来源/
- 露水/
- package.d
- util.d
- 露水/
或者,由于文件顶部的 module
声明,可以手动一个一个地手动指定所有文件,编译器可以在其中查找它们,但是您失去了模块名称的便利性映射到文件系统路径,这可能是其他社区制作的 D 源工具和 IDE 所期望的。在命令行上相当于
dmd source/app.d ../dew/source/dew/package.d ../dew/source/dew/util.d
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。