gpt4 book ai didi

class - 无法解决 Eiffel 中的错误 “target of assigner call has no associated assigner command”

转载 作者:行者123 更新时间:2023-12-02 10:45:15 27 4
gpt4 key购买 nike

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

创建对象的类:

class
TEST1

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

正在创建其对象的类:
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

似乎赋值语句存在一些问题。但是,我无法理解哪里出了问题。

这些类已在同一项目的同一群集下的不同文件中定义。我是Eiffel的新手,所以我不知道这可能是问题所在。

谢谢。

最佳答案

在Eiffel中,每个属性都被视为只读。这样就无需像使用其他语言(如Java)那样创建 setter/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。这是一种机制,确保不会被视为“可分离”的属性永远不会无效(类似于其他语言中的NULL)。默认情况下,每个类都具有名为“default_create”的默认构造函数,并且该构造函数不执行任何操作。您要做的是在{TEST1}类中创建您自己的构造函数,以实例化其中的每个属性。这是一个例子:
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,指定该方法为构造函数,并在此方法中确保对象属性正确实例化。

关于class - 无法解决 Eiffel 中的错误 “target of assigner call has no associated assigner command”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40424240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com