簡體   English   中英

無法解決Eiffel中的錯誤“分配器調用的目標沒有關聯的分配器命令”

[英]Unable to resolve error “target of assigner call has no associated assigner command” in Eiffel

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)那樣創建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,指定該方法為構造函數,並在此方法中確保對象屬性正確實例化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM