【发布时间】:2016-10-18 10:32:36
【问题描述】:
我是 Eiffel 的新手,我正在尝试使用 LINKED_LIST 类来组织我创建的其他类“MONOMIO”的实例。我添加了一个对这些元素进行排序的函数,并使用了删除和光标移动功能,当我尝试执行代码时,它会引发一个异常,指出包含的对象应该是可读可写的。我想知道怎么做,这是我的课:
class
MONOMIO
feature --Initialization
make (coef:INTEGER; expX:INTEGER; expY:INTEGER)
do
coeficiente := coef
exponenteX := expX
exponenteY := expY
end
feature
evaluar(valX: INTEGER; valY: INTEGER): REAL_64
do
Result := coeficiente*(valX^exponenteX)*(valY^exponenteY)
end;
coeficiente: INTEGER;
exponenteX: INTEGER;
exponenteY: INTEGER;
feature --setter
set_coeficiente(val: INTEGER)
do
coeficiente := val
end;
end
我认为引发异常的原因是我为一个具有 LINKED_LIST[MONOMIO] 特性的类创建了这个特性,它被称为“contenido”:
simplificar
local
tamanio_polinomio: INTEGER -- Número de monomios que tiene el polinomio
contador: INTEGER
monomio_a_comparar: MONOMIO -- Auxiliar
coeficiente_total:INTEGER -- Auxiliar
indice_monomio_en_revision:INTEGER
do
from
contenido.start
indice_monomio_en_revision := 0
tamanio_polinomio := contenido.count
until
indice_monomio_en_revision = tamanio_polinomio
loop
contenido.start
contenido.move (indice_monomio_en_revision)
monomio_a_comparar := contenido.item
from
contador := indice_monomio_en_revision
coeficiente_total := monomio_a_comparar.coeficiente
contenido.forth
until
contador = tamanio_polinomio
loop
if
(monomio_a_comparar.exponentex = contenido.item.exponentex) and
(monomio_a_comparar.exponentey = contenido.item.exponentey)
then
coeficiente_total := coeficiente_total + contenido.item.coeficiente
contenido.remove -- Mueve el cursor a la derecha
tamanio_polinomio := tamanio_polinomio - 1
contador := contador - 1
else
if
not contenido.islast
then
contenido.forth
end
end
contador := contador + 1
end
contenido.start
contenido.move (indice_monomio_en_revision)
contenido.item.set_coeficiente (coeficiente_total)
indice_monomio_en_revision := indice_monomio_en_revision + 1
end
end;
我希望任何人都可以帮助我解决这个问题。谢谢。
【问题讨论】:
-
该类看起来不错,我猜问题出在与 LINKED_LIST 一起使用的代码中。你能告诉我们你得到的确切错误是什么吗?是编译时错误还是运行时错误?
-
@AlexanderKogtenkov 这是运行时引发的异常,它说“可读:PRECONDITION_VIOLATION 引发”,这是由于 LINKED_LIST 要求包含的对象可读
-
请您显示导致异常的代码,好吗? (
readable是前置条件子句的名称,它与你的类MONOMIO无关。) -
@AlexanderKogtenkov 当然,当异常引发时,它向我展示了这一点,这是其功能“项目”的 LINKED_LIST 代码:
item: G -- Current item require -- from TRAVERSABLE not_off: not off require -- from ACTIVE readable: readable do check attached active as a then Result := a.item end end -
我指的是您的代码,而不是
LINKED_LIST的代码。我认为问题在于您尝试访问列表之外的项目。
标签: linked-list eiffel readable