2013-11-01 9 views
5

provo a compilare il seguente codice:campo sommerso nel tipo ereditato compilazione programma Nimrod

type 
    TPerson = object of TObject 
    name*: string 
    age: int 

    TStudent = object of TPerson 
    id: int 

var 
    student: TStudent 
    person: TPerson 

student = TStudent(name: "Anton", age: 5, id: 2) 

ma ottengo il seguente errore:

Error: undeclared field: 'id'

Come è id non dichiarato? L'esempio del codice è direttamente dal tutorial. È cambiato qualcosa nella lingua che non si riflette nel tutorial?


Inoltre, se provo a eseguire il codice seguente:

student = TStudent(name: "Anton") 
echo student.name 

ottengo il seguente errore:

SIGSEGV: Illegal storage access. (Attempt to read from nil?)

Perché?

risposta

3

Ho paura che probabilmente utilizzi l'ultima versione stabile di Nimrod (versione 0.9.2 è stata rilasciata nel maggio 2013) o un vecchio checkout di git, ciò che evidenzia sono bug nel compilatore. In questo momento con la versione git https://github.com/Araq/Nimrod/commit/75ca6eb34fbc983d88961664fd1cfce5f8b44abf il tuo primo e ultimo esempio funziona senza problemi. Negli ultimi mesi sono stati corretti diversi bug relativi all'ereditarietà degli oggetti nella lingua (issue 179, issue 520, issue 575 e issue 563).

Se si decide di creare una versione git (non è affatto spaventoso, anche se a volte ci sono regressioni nella lingua) per favore use the build instructions from the git poiché il sito Web potrebbe non essere stato ancora aggiornato.

+0

Trovato qualcuno con lo stesso problema nei [forum di nimrod] (http://forum.nimrod-code.org/t/285) – sloth

Problemi correlati