Search code examples
agenteiffel

Getting the error “VEVI: Variable is not properly set” in Eiffel, too


I am trying to make an agent "print_min_fold" for for a linked_list "folds" in Eiffel:

------------------------Schnipp:

class PF_HP


create
 make

feature --Queries:
--  n : NONE;

grid: separate GRID;

seq: BOOL_STRING;
strseq: STRING;
iseq: INTEGER;

zero, one: BOOLEAN;

fold: STRING;

folds: LINKED_LIST[STRING];

losses, indices: LINKED_LIST[INTEGER];
 -- indices: ARRAY[INTEGER];

i: INTEGER;
loss, min: INTEGER
 --Constructor:

make
  do

min:=9999
loss:=0

 from
  io.put_string("                           123456789012345%N")
  io.put_string ("Bitte Bitsequenz eingeben: ")
  io.read_line
 until
        (not io.last_string.is_empty) --and then io.last_string.is_bit
 loop
   io.put_string("%N")
   io.put_string("Keine Bitsequenz eingegeben. Besteht nur aus 0 und 1 in beliebiger Reihenfolge!%N")
     io.put_string("                           123456789012345%N")
     io.put_string ("Bitte Bitsequenz eingeben: ")
     io.read_line
   end
-- iseq:=io.last_integer
 strseq:=io.last_string
 create folds.make
 create losses.make
 create indices.make --from_collection(losses)
 create fold.make(strseq.count-1)
 create seq.make(strseq.count)
 --create zero.make

zero:=False
one:=True

---------------------------etc...

 print_min_fold
do
  folds.do_all( agent print_item(?) )

end

 print_item(item: STRING)
    do
     number := number + 1
     io.put_character('#')
     io.put_integer(number)
     io.put_character(' ')
     io.put_string(item)
     io.put_character('%N')
  end -- print_item

-----------------------------------Schnapp

The error I do get is:

Error code: VEVI

Error: variable is not properly set.
What to do: ensure the variable is properly set by the corresponding
setter instruction.

Class: PF_HP
Feature: print_min_fold
Creation procedure: make declared in PF_HP
Attribute(s): grid
Line: 400
do
->    folds.do_all( agent print_item(?) )

Solution

  • It looks like print_min_fold is called before grid is attached an object. You need to initialize grid before print_min_fold can be called.

    Alternatively you can mark grid as detachable separate, but then you would have to use object tests to make sure it is not void before making any calls on it.