2

我正在尝试在 Eiffel 中创建一个由一些属性和函数组成的类。我不断遇到属性对 setName 不可见或未正确初始化的问题。编译器错误是:VEVI:变量设置不正确。属性:名称。我希望能够在 APPLICATION 中实例化 TESTER 对象并调用这些方法。

class
    TESTER
create
    make

feature

    name: STRING
    score: INTEGER
    make

        do
            io.putstring ("I am making TESTER%N")
        end

        sleep
        do
            io.put_string ("TESTER is sleeping%N")
        end

        setName (name_: STRING)
        do
            name := name_
        end

end
4

1 回答 1

2

这与void-safetyhttps://www.eiffel.org/doc/eiffel/Void-safe%20programming%20in%20Eiffel)有关。

有几种方法可以解决示例中的问题,其中两种如下所示:

  1. 声明namedetachable。默认情况下,类类型是attached. 将类型更改为detachable允许将属性name初始化为默认值Void,即不附加到任何对象。

    name: detachable STRING
    
  2. name在创建过程中将对象附加到属性make

    make
        do
            io.putstring ("I am making TESTER%N")
            name := "something"
        end
    

该规则的简化版本表示所有属性都应在创建过程结束时设置

于 2015-09-23T17:24:30.693 回答