Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class “无法解决错误”;赋值器调用的目标没有关联的赋值器命令“;在埃菲尔_Class_Compiler Errors_Eiffel - Fatal编程技术网

Class “无法解决错误”;赋值器调用的目标没有关联的赋值器命令“;在埃菲尔

Class “无法解决错误”;赋值器调用的目标没有关联的赋值器命令“;在埃菲尔,class,compiler-errors,eiffel,Class,Compiler Errors,Eiffel,在中,我一直在尝试访问从另一个类定义的类的对象的字段。然而,它不断地给出我无法理解和解决的错误。以下是示例代码片段: 正在创建对象的类: class TEST1 feature object: TEST2 -- object of type TEST2 function(val: INTEGER) -- Assign do object.value:=val end end

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

正在创建对象的类:

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

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

赋值语句似乎有一些问题。然而,我一直无法理解到底是什么错了

这些类已在同一项目的同一集群下的不同文件中定义。我是埃菲尔铁塔的新手,所以我不知道这是否是个问题


谢谢。

在埃菲尔铁塔中,每个属性都是只读的。这样就不需要像在Java等其他语言中那样创建getter。要使用“:”=“syntax”将值分配给属性,您需要一个赋值器。这里有一个例子:

class
    TEST2

feature
    value:INTEGER assign set_value

    set_value(a_value:INTEGER)
        do
            value := a_value
        end
end
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
然后,您将能够使用该行:

object.value:=val
对于第二个错误,默认情况下,EiffelStudio是我们称之为Void-Safe的。这是一种确保不被认为是“可分离”的属性永远不会无效(类似于其他语言中的NULL)的机制。默认情况下,每个类都有一个名为“default_create”的默认构造函数,这个构造函数不做任何事情。您需要做的是,在{TEST1}类中创建自己的构造函数,实例化其中的每个属性。以下是一个例子:

class
    TEST2

feature
    value:INTEGER assign set_value

    set_value(a_value:INTEGER)
        do
            value := a_value
        end
end
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,指定该方法是构造函数,在这个方法中,我确保object属性正确地实例化。

谢谢。我没有意识到这一点。但是,此更改仅更正第一个错误。你能告诉我是什么导致了第二个错误,以及如何纠正它吗?对不起,我忘了。我编辑我的答案以帮助您解决这两个错误。