0

CUSTOMER クラス

class
    CUSTOMER
create
    make

feature{NONE} -- Creation

make(a_name:STRING)
        -- Create a customer with an `account'
    local
        l_account: ACCOUNT
        l_name: IMMUTABLE_STRING_8
        l_bank: BANK
    do
        l_name := a_name
        name := l_name
        create l_account.make_with_name (a_name)
        create l_bank.make
        b := l_bank
        account := l_account
    ensure
        correct_name: name ~ a_name
        correct_balance: balance = balance.zero
    end

feature -- queries

name: IMMUTABLE_STRING_8

balance: VALUE
    do
        Result := account.balance
    end

account: ACCOUNT

b: BANK




 invariant
    name_consistency: name ~ account.name
    balance_consistency: balance = account.balance
 end

BANK クラスの一部:

   make  -- make a bank

       do
          count := 0
          create [ARRAY_LIST][CUSTOMER] customers.make(10)
          customers.count.set_Item(10)

       end

   new(name1: STRING) -- add a new customer to bank

       require 
         ....
       local
            c: CUSTOMER
       do
          create c.make(name1)
          customers.extend(c)
          count := count + 1




       ensure
          ...
       end

顧客を配列に入れようとすると、ARRAY_LIST クラスからチェック アサーション エラーが発生します。私が取得するタグは「valid_index」です。インデックスが正しく、配列のカウントを設定して正しいインデックスを指定しているため、なぜ間違っているのかわかりません。

顧客はタイプCUSTOMERクラスです

銀行には顧客がいて、顧客には口座があります

CUSTOMER には ACCOUNT クラスがあります

4

2 に答える 2

1

機能「カウント」を見ると、属性ではなく関数であることがわかります。SPECIAL のカウントを返します。次に、この結果を編集します。しかし、{SPECIAL}.count を見ると、これは組み込みの外部ルーチンであり、属性ではありません。したがって、呼び出しによって影響を受けることはおそらくありません。(これを確認するために put_i_th を呼び出す前に、valid_index をテストできます)。

基本的に、ARRAYED_LIST は LIST であり、ARRAY ではありません (ARRAY ですが、それは実装の詳細です)。したがって、あなたのアルゴリズムはリストには無効です (extend を使用してリストの最後に、または put_front を使用して前に新しい項目を追加することしかできません。後者は ARRAYED_LIST では非効率的です。)

于 2016-01-15T06:29:55.127 に答える