首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VDM++类型错误:这里不能使用状态组件"totalPrice“

VDM++类型错误:这里不能使用状态组件"totalPrice“
EN

Stack Overflow用户
提问于 2021-12-05 13:37:02
回答 1查看 73关注 0票数 0

我编写了一个代码,用于VDM++中的图书总价乘以图书数量和图书价格。

代码语言:javascript
复制
class Book

types
    public Title = seq of char;
    
instance variables
    private bookTitle: Title;
    private numberOfPages: nat1;
    private totalPrice : real;
    private price : real;
    private noofBook : nat1;
    
    inv numberOfPages >= 1 and numberOfPages <= 100;

values
    public Price: real = 20.50;

operations
    expCalculateTotalPrice: nat1 * real ==> real
    expCalculateTotalPrice (noofBook,price) ==
    ( 
        totalPrice := noofBook * price;
        return totalPrice;
    )

operations
    impCalculateTotalPrice(Book:real) price:real
      pre price > noofBook and price > 0
      post totalPrice = noofBook * price

end Book

错误是“状态组件"totalPrice”不能在这里使用“

代码语言:javascript
复制
post totalPrice = noofBook * price

这些有什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2021-12-06 09:56:45

在隐式操作定义中需要外部访问声明,如下所示:

代码语言:javascript
复制
      ext
        rd noofBook:nat1
        wr totalPrice:real

如果您想要像显式版本那样写入实例变量totalPrice

另一件可能使工具混淆的事情是名称崩溃。您的正式返回值price正在隐藏同名的实例变量,该工具可能会在前提条件下考虑返回值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70234846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档