Ada 在完整声明之前使用类型

Ada 在完整声明之前使用类型,ada,Ada,我有一个简单的问题,但我找不到答案 在Ada中是否可能有两种类型包含彼此类型的组件 以下是我想做的一个简单示例: type Toto is record T: Titi; end record; type Titi is record T: Toto; end record; 它不是以这种方式工作的,但是否有可能使某些东西等效?您必须向前声明Titi。我认为应该采取以下措施: type Titi; type Toto is record T: Titi; end reco

我有一个简单的问题,但我找不到答案

在Ada中是否可能有两种类型包含彼此类型的组件

以下是我想做的一个简单示例:

type Toto is record
   T: Titi;
end record;

type Titi is record
   T: Toto;
end record;

它不是以这种方式工作的,但是否有可能使某些东西等效?

您必须向前声明Titi。我认为应该采取以下措施:

type Titi;

type Toto is record
   T: Titi;
end record;

type Titi is record
   T: Toto;
end record;

你必须转告提提。我认为应该采取以下措施:

type Titi;

type Toto is record
   T: Titi;
end record;

type Titi is record
   T: Toto;
end record;

您不能这样做:Toto的实例应该如何创建?它必须包含一个Titi的实例,而Titi又包含一个Toto,以此类推

然而,类似的情况是可能的:

type Titi;

type Toto is record
   T : access Titi;
end record;

type Titi is record
   T : Toto;
end record;
在这种情况下,Toto只包含一个指向Titi类型记录的引用/指针,而不是实际的Titi。 为了找到最佳的类型声明,请仔细考虑您希望用这些类型表示什么,以及关系到底是什么。我相信你会发现,你在问题中提出的内容并不准确地代表你的问题。相反,Toto.T和Titi.T中至少有一个需要用访问值表示——可能两者都是。
您没有说明手头的问题是什么,因此我不知道什么是最合适的类型声明。

您不能这样做:Toto的实例应该如何创建?它必须包含一个Titi的实例,而Titi又包含一个Toto,以此类推

然而,类似的情况是可能的:

type Titi;

type Toto is record
   T : access Titi;
end record;

type Titi is record
   T : Toto;
end record;
在这种情况下,Toto只包含一个指向Titi类型记录的引用/指针,而不是实际的Titi。 为了找到最佳的类型声明,请仔细考虑您希望用这些类型表示什么,以及关系到底是什么。我相信你会发现,你在问题中提出的内容并不准确地代表你的问题。相反,Toto.T和Titi.T中至少有一个需要用访问值表示——可能两者都是。
您没有说明手头的问题是什么,因此我不知道什么是最合适的类型声明。

我尝试了它,但它不起作用,编译器说:类型在完全使用之前使用无效declaration@AnsgarEsztermann是正确的,使用指针/访问。这里的问题是,titi和toto声明无限地引用它们自己。如果编译器真的按照他的要求去做,它就必须无限地创建记录字段,就像对面墙上镜子中的图像一样。考虑到他的机器没有无限的内存,他也没有永恒的等待时间,任何语言的编译器将其标记为错误似乎都是合理的-@你是对的。我错过了访问属性。似乎很久以前我就需要这个了-我试过了,但没用,编译器说:类型在完全使用之前使用无效declaration@AnsgarEsztermann是正确的,使用指针/访问。这里的问题是,titi和toto声明无限地引用它们自己。如果编译器真的按照他的要求去做,它就必须无限地创建记录字段,就像对面墙上镜子中的图像一样。考虑到他的机器没有无限的内存,他也没有永恒的等待时间,任何语言的编译器将其标记为错误似乎都是合理的-@你是对的。我错过了访问属性。似乎很久以前我就需要这个了-非常感谢,这回答了我的问题。非常感谢,这回答了我的问题。