2015-09-23 7 views
2

Я пытаюсь создать класс в Eiffel, состоящий из нескольких атрибутов и функций. Я продолжаю получать проблемы с атрибутами, которые либо не видны для setName, либо не были правильно инициализированы. Ошибка компилятора: VEVI: переменная неправильно настроена. Атрибут (ы): имя. Я хочу иметь возможность создать экземпляр объекта TESTER в APPLICATION и вызвать эти методы.Атрибуты класса в Eiffel

class 
    TESTER 
create 
    make 

feature 

    name: STRING 
    score: INTEGER 
    make 

     do 
      io.putstring ("I am making TESTER%N") 
     end 

     sleep 
     do 
      io.put_string ("TESTER is sleeping%N") 
     end 

     setName (name_: STRING) 
     do 
      name := name_ 
     end 

end 

ответ

2

Это связано с Пустоты безопасности (https://www.eiffel.org/doc/eiffel/Void-safe%20programming%20in%20Eiffel).

Есть несколько способов решения этого вопроса в данном примере, два из них приведены ниже:

  1. Объявить name в detachable. По умолчанию типы классов: attached. Изменение типа на detachable позволяет инициализировать атрибут name значением по умолчанию Void, то есть не прикрепленным к какому-либо объекту.

    name: detachable STRING 
    
  2. Присоединить объект с атрибутом name в процедуре создания make.

    make 
        do 
         io.putstring ("I am making TESTER%N") 
         name := "something" 
        end 
    

упрощенная версия правила говорит, что все атрибуты должны быть установлены в конце процедуры создания.