Here a pointer is returned that makes no sense:
Code: Select all
*Name = FindMapElement (*Names(), "QueenMum")
Code: Select all
FindMapElement (*Names(), "QueenMum")
*Name = *Names()
Code: Select all
*Name = FindMapElement (*Names(), "QueenMum")
Code: Select all
FindMapElement (*Names(), "QueenMum")
*Name = *Names()
Code: Select all
Define *Name.String ;dereference pointers with an appropriate structure
*Name = FindMapElement (*Names(), "QueenMum") ;one line
;If *Name <> 0
Debug *Name\s
;EndIf
Code: Select all
Structure PERSON
NameFirst$
NameLast$
EndStructure
NewList Persons.PERSON()
NewMap *Persons.PERSON()
Define *Person .PERSON
AddElement (Persons())
Persons()\NameFirst$ = "Queen"
Persons()\NameLast$ = "Mum"
AddMapElement (*Persons(), "QueenMum")
*Persons() = @Persons()
*Person = FindMapElement (*Persons(), "QueenMum") ; 1. Line
Debug *Person\NameFirst$
Debug *Person\NameLast$
Debug "-----"
*Person = *Persons() ; 2. Line needed
Debug *Person\NameFirst$
Debug *Person\NameLast$
Debug "-----"
Code: Select all
Structure PERSON
NameFirst$
NameLast$
EndStructure
Structure pPerson
*Person.PERSON
EndStructure
NewList Persons.PERSON()
NewMap *Persons.PERSON()
Define *Person .PERSON
Define *pPerson.pPerson
AddElement (Persons())
Persons()\NameFirst$ = "Queen"
Persons()\NameLast$ = "Mum"
AddMapElement (*Persons(), "QueenMum")
*Persons() = @Persons()
*Person = PeekI(FindMapElement (*Persons(), "QueenMum")) ; Peek Pointer to Person
Debug *Person\NameFirst$
Debug *Person\NameLast$
Debug "-----"
*pPerson = FindMapElement (*Persons(), "QueenMum") ; *pPointer to Pointer of Person
Debug *pPerson\Person\NameFirst$
Debug *pPerson\Person\NameLast$
Debug "-----"
This is a possibility, but I doubt that the code will be better with the additional structure and additional dereferencing in each line. I like my version better.mk-soft wrote:Use pointer to pointer (ppPerson)