【问题标题】:Failure with compilation D code编译 D 代码失败
【发布时间】:2014-02-25 01:30:13
【问题描述】:

我有多个问题。首先,如果我想用 GDC 编译简单的 hello world 程序,它会返回一个错误:function expected before (), not writeln of type int。

module test.main;
import std.stdio;

void main()
{
     writeln("Hello world");
}

如果我在 compileonline.com 上使用在线编译器。它工作正常(有趣......)。 第二个问题。如果我想通过destroy(object)调用析构函数。它返回错误:错误:未定义的标识符销毁。

【问题讨论】:

  • 我没有 GDC,但代码可以用 DMD2 很好地编译(destroy(object) 也是如此)。
  • 确保你有新版本,你可能有一个非常旧的编译器。请注意,dmd 也使用 ld。虽然它不使用 as,但您仍然可以使用 objdump 反汇编其输出,或者您可以链接使用 as 编写的函数。
  • 通过创建一个小 D 文件来检查版本:pragma(msg, __VERSION__); 并在编译时查看它的内容。
  • 我建议您编辑您的原始帖子并删除(不公平的)最后声明。否则我别无选择,只能投反对票……
  • __ctor 和 __dtor 只是构造函数和析构函数的名称。它们没有在任何地方正式定义,这些只是编译器将 this() 和 ~this() 函数转换为的名称,并允许您稍后在没有关键字的情况下访问它们。我不知道您是否可以使用 gdc 二进制文件,可能取决于您的发行版,但 wiki 有一些信息:wiki.dlang.org/GDC#Binary_Releases

标签: d


【解决方案1】:

第二个问题:使用统一的函数语法并将destroy函数归类为要销毁的对象的成员。或者更好的是,让垃圾收集器为您处理。

【讨论】:

  • writeln 在 std.stdio 中已经存在很长时间了...我想是在 2007 年左右添加的。它不在 D1 中,但现在已经很老了。
  • 我不知道为什么那个东西在我的脑海里,但你是对的。
  • 是的,我错了。该功能存在并且应该可以工作。我用 DMD 对其进行了测试,结果很好......当我开始学习 D 时,我遇到了一个类似 function writeln does not exist 的错误,并且这种想法似乎一直存在 ^^
猜你喜欢
  • 1970-01-01
  • 2015-11-04
  • 2011-01-22
  • 2010-12-31
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 2015-09-13
相关资源
最近更新 更多