无法解决 Eiffel 中的错误 "target of assigner call has no associated assigner command"

Unable to resolve error "target of assigner call has no associated assigner command" in Eiffel

Eiffel Studio 中,我一直在尝试访问我从另一个 class 定义的 class 对象的字段。但是,它不断出现我无法理解和解决的错误。以下是示例代码片段:

Class 创建对象的位置:

class
    TEST1

feature
    object: TEST2
        -- object of type TEST2
    function(val: INTEGER)
            -- Assign
        do
            object.value:=val
        end
end

Class 正在创建谁的对象:

class
    TEST2

feature 
    value: INTEGER
end

报错信息如下:

Error code: VBAC(2)

Error: target of assigner call has no associated assigner command.
What to do: add an assigner mark to the declaration of the target feature or use a dot form of a call.

Class: TEST1
Feature: function
Line: 10
      do
->      object.value:=val
      end

Error code: VEVI

Error: variable is not properly set.
What to do: ensure the variable is properly set by the correspondig setter instruction.

Class: TEST1
Source class: ANY
Feature: default_create
Attribute(s): object
Line: 331
      do
->    end

赋值语句好像有问题。但是,我一直无法理解哪里出了问题。

classes已经定义在同一个项目的同一个集群下的不同文件中。我是 Eiffel 的新手,所以我不知道这是否是问题所在。

谢谢。

在Eiffel 中,每个属性都被视为只读。这消除了像在 Java 等其他语言中那样创建 getter 的需要。要使用“:=”语法为属性赋值,您需要一个赋值器。举个例子:

class
    TEST2

feature
    value:INTEGER assign set_value

    set_value(a_value:INTEGER)
        do
            value := a_value
        end
end

然后,您将可以使用该行:

object.value:=val

对于第二个错误,默认情况下,EiffelStudio就是我们所说的Void Safe。这是一种确保不被视为 "detachable" 的属性永远不会为 Void(类似于其他语言中的 NULL)的机制。默认情况下,每个 class 都有一个名为 "default_create" 的默认构造函数,并且此构造函数不执行任何操作。您需要做的是在 {TEST1} class 中创建您自己的构造函数,以实例化其中的每个属性。这是一个例子:

class
    TEST1

create
    make

feature
    make
        do
            create object
        end

    object: TEST2
        -- object of type TEST2
    function(val: INTEGER)
            -- Assign
        do
            object.value:=val
        end
end

在前面的示例中,我创建了一个方法调用 make,指定该方法是构造函数,并且在该方法中,我确保正确实例化了对象属性。