当Ada编译器发现鉴别检查失败时,意味着在代码中使用了不兼容类型的对象进行鉴别操作。鉴别操作用于判断两个对象是否相同,所以必须确保这两个对象具有相同的类型。
以下是一个包含鉴别检查失败的代码示例:
type Color is (Red, Green, Blue);
type Shape is record
case Color is
when Red =>
Size : Integer;
when Green =>
Weight : Float;
when Blue =>
Name : String(1..10);
end case;
end record;
procedure Test is
S1 : Shape;
S2 : Shape;
begin
S1 := (Color => Red, Size => 10);
S2 := (Color => Blue, Name => "Circle");
if S1'Class = S2'Class then
-- 鉴别检查失败,因为S1和S2的类型不同
null;
end if;
end Test;
要解决这个问题,我们需要确保进行鉴别操作的对象具有相同的类型。在上面的示例中,我们可以通过确保S1
和S2
具有相同的类型来解决这个问题。
type Color is (Red, Green, Blue);
type Shape(Size_Type : Integer := 0; Weight_Type : Float := 0.0; Name_Type : String := "") is record
case Color is
when Red =>
Size : Integer := Size_Type;
when Green =>
Weight : Float := Weight_Type;
when Blue =>
Name : String(1..10) := Name_Type;
end case;
end record;
procedure Test is
S1 : Shape;
S2 : Shape;
begin
S1 := (Color => Red, Size => 10);
S2 := (Color => Blue, Name => "Circle");
if S1'Class = S2'Class then
-- 鉴别检查通过
null;
end if;
end Test;
在上面的示例中,我们通过在Shape
类型中添加带有默认值的参数来确保S1
和S2
具有相同的类型。这样,无论是使用Size
、Weight
还是Name
字段进行鉴别操作,都可以保证类型一致。
上一篇:Ada的详细说明完全没有发生。
下一篇:Ada的最新重大更改