gpt4 book ai didi

module - D中单独模块中类的静态初始化和使用

转载 作者:行者123 更新时间:2023-12-01 01:21:24 27 4
gpt4 key购买 nike

在我的程序中,我有一个要在进入 main() 之前分配的类。我想把这些放在一个单独的模块中,以防止我的代码杂乱无章;但是,一旦模块超出范围(在进入 main() 之前),对象就会被释放,让我尝试在 main.xml 中使用空引用。一个简短的例子:

// main.d

import SceneData;

int main(string[] argv)
{
start.onSceneEnter();

readln();
return 0;
}

// SceneData.d

import Scene;

public
{
Scene start;
}

static this()
{
Scene start = new Scene("start", "test", "test";
}

// Scene.d

import std.stdio;

class Scene
{
public
{
this(string name)
{
this.name = name;
}

this(string name, string descriptionOnEnter, string descriptionOnConnect)
{
this.name = name;
this.descriptionOnEnter = descriptionOnEnter;
this.descriptionOnConnect = descriptionOnConnect;
}

void onSceneEnter()
{
writeln(name);
writeln(descriptionOnEnter);
}
}

private
{
string name;
string descriptionOnEnter;
string descriptionOnConnect;
}
}

我仍然习惯于模块作为封装的基本单元的概念,而不是 C++ 和 Java 中的类。这可以在 D 中完成,还是必须将我的初始化移动到主模块?

最佳答案

这里:

static this()
{
Scene start = new Scene("start", "test", "test");
}

“start”是一个局部范围变量,它会影响全局变量。全局一未初始化。
在我将其更改为:
static this()
{
start = new Scene("start", "test", "test");
}

程序不再崩溃。

关于module - D中单独模块中类的静态初始化和使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9006732/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com