Opened 16 years ago
Closed 16 years ago
#714 closed defect (fixed)
Herencia. Error inesperado
Reported by: | Javier Portugal | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
Priority: | high | Milestone: | OOP Implementation |
Component: | OOP | Version: | 2.0.1 |
Severity: | critical | Keywords: | |
Cc: |
Description
El siguiente ejemplo produce un error que no consigo explicar. Lo he reproducido de otro código.
Class Variable { Text _.name }; Class Input { Text _.name; Variable _.variable }; Class ExplicativeTerm { Text _.name ; Text _.description = "Sin descripción"; Set _.parameters = Copy(Empty) }; Class LinearExplicativeTerm: ExplicativeTerm { Input _.input }; Class OmegaExplicativeTerm : LinearExplicativeTerm { Real _.member }; Variable myVar = [[ Text _.name = "mi variable" ]]; Input II = [[ Text _.name = "input", Variable _.variable = myVar ]]; OmegaExplicativeTerm D1 = [[ Text _.name = "D1", Input _.input = II, Real _.member = 2.0 ]];
Change History (4)
comment:1 Changed 16 years ago by
Status: | new → assigned |
---|
comment:2 Changed 16 years ago by
He encontrado el error aunque no sé aún cómo arreglarlo.
El problema es que el parser se como los paréntesis cuando sólo hay un elemento dentro de una lista, como es el caso de la sentencia
Class LinearExplicativeTerm: ExplicativeTerm { Input _.input };
Debido a ello interpreta la sentencia como
Class LinearExplicativeTerm: ExplicativeTerm, Input;
y por eso dice que falta de definir el miembro _.variable. A parte de eso no sé porqué no da un error pues no debería aceptar Input seguido de _.input dentro de la sección de herencia.
De momento, mientras busco una solución decente, se puede vadear el problema añadiendo un campo ficticio
Class LinearExplicativeTerm: ExplicativeTerm { Input _.input; Real unused_1_=? };
comment:3 Changed 16 years ago by
Mejor un miembro oculto ficticio
Class LinearExplicativeTerm: ExplicativeTerm { Input _.input; Real _unused_1_=? };
comment:4 Changed 16 years ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Ya lo tengo reproducido. El error que devuelve es
Efectivamente no tiene sentido porque, para empezar sí está definido
Variable Input::_.variable
y, en todo caso, de no haber existido, el error deberia haberlo dado al crearInput II
A depurar tocan.