Инициализация массива в Eiffel

class
    MAP[G]
create
    make

feature --attributes
    g_array: ARRAY[G]
    size:INTEGER

feature{NONE}
make
    do
        g_array.make_empty
           size:=0
    end

class
    MAP_TESTING

m: MAP[INTEGER]

create m.make
print(m.size)

Первый класс состоит из массива и его размера. Когда я попытался создать объект m из ARRAY, ничего не распечатывается, когда я помещаю print(m.size). Правильно ли я создаю массив? Я использую правильную функцию make для ARRAY? Почему ничего не печатает?

---------------------------

class
    MAP[G]
create
    make

feature --attributes
    g_array: ARRAY[G]
    size:INTEGER

feature{NONE}
make
  --I left this blank
    end

class
    MAP_TESTING

m: MAP[INTEGER]

create m.make
print(m.size)

Это на самом деле работает, когда я оставил make пустым. Он распечатывает 0. Но это нехорошо, потому что очевидно, что если я вызову другие функции, используя массив в MAP, это не сработает. На самом деле я пытался использовать другие функции из класса ARRAY, но получил ошибку компиляции.


person J0natthaaann    schedule 22.02.2014    source источник
comment
Код с g_array.make_empty вызывает исключение Feature call on void target, поскольку g_array не инициализирован. Поэтому оператор print вообще не выполняется. Правильный код заменит вызов функции в g_array инструкцией по созданию в g_array, которая создаст объект массива, а затем выполнит для него make_empty.   -  person Alexander Kogtenkov    schedule 23.02.2014


Ответы (1)


Строка для создания массива в MAP должна быть:

create g_array.make_empty

И MAP_TESTING должно быть:

class
    MAP_TESTING
creation
    make
feature
    m: MAP[INTEGER]

    make
    do
        create m.make
        print(m.size)
    end
end

(Обратите внимание, что print не выводит новую строку, поэтому ноль может быть легко потерян в терминале.)

person Arkku    schedule 23.02.2014