【问题标题】:Ada - "type has no constraint" error when instantiating recordAda - 实例化记录时出现“类型没有约束”错误
【发布时间】:2013-08-15 03:16:05
【问题描述】:

我有一些如下所示的 Ada 代码:

type NODE;
type NODE_PTR is access NODE;
type PRINT_PTR is access procedure(X: NODE_PTR);
type NODE is
record
             parent : NODE_PTR;
             left : NODE_PTR;
             right : NODE_PTR;
             id : INTEGER;
             visit : PRINT_PTR;
end record;

procedure PRINT(X : NODE_PTR) is
...
end PRINT;

稍后在我的代码中,我尝试像这样实例化节点:

root : NODE_PTR;
id_value : INTEGER;
...
root := new NODE(NULL, NULL, NULL, id_value, PRINT'access);
...

还有这个:

ret_ptr : NODE_PTR;
id_value : INTEGER;
...
ret_ptr := new NODE(parent, NULL, NULL, id_value, PRINT'access);

当试图“gnatmake”这段代码时,编译器抱怨两个赋值语句都说:“无效的约束:类型没有判别式”。 怎么了?据我所知,我没有在 NODE 中定义任何判别式,也没有尝试在这些新的 NODE 调用中分配任何判别式。

【问题讨论】:

    标签: ada


    【解决方案1】:

    当使用初始值分配访问类型时,你需要一个像这样的':

    root := new NODE'(NULL, NULL, NULL, id_value, PRINT);
    

    【讨论】:

    • 对。对于'NODE'(...) 是一个限定表达式。没有它,NODE(...) 就是一个子类型——或者如果NODE 有适当的判别器,它就是一个子类型。
    猜你喜欢
    • 1970-01-01
    • 2012-06-29
    • 2016-11-15
    • 2015-10-27
    • 1970-01-01
    • 2019-12-31
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多