无法解决 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,指定该方法是构造函数,并且在该方法中,我确保正确实例化了对象属性。
在 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,指定该方法是构造函数,并且在该方法中,我确保正确实例化了对象属性。