Seite 1 von 2
Pointerübergabe und Changecurrentelement
Verfasst: 13.11.2004 15:23
von Serge
Ich habe eine Struktur, die unter anderem einen Pointer beinhaltet,
z. B. "*link"
Wie spräche ich diese Variable denn nun an?
(oder ist es denn garnicht erlaubt pointer in einer Struktur zu haben?)
Code: Alles auswählen
structure test
variable.l
*link
endstructure
newlist tlist.test()
addelement(tlist())
newlist tlist2.test()
addelement(tlist2())
tlist()\*link = @tlist2() ; <-- gibt mir eine Fehlermeldung!
und noch was:
Wenn ich mit "Changecurrentelement" ein Element anspreche, das garnicht mehr existiert, was passiert dann? Gibt es einen Absturz, oder wird das aktuelle element -1?
Wenn das erstere der Fall ist, gibt es da eine möglichkeit davor zu überprüfen ob das element denn existiert?
Verfasst: 13.11.2004 15:33
von Serge
das erste problem hat sich gelöst,
tlist()\link = @tlist2()
heisst es richtig.
edit:
Die zeite Frage hat sich auch erledigt,
das "currentelement" wird dann lediglich zu -1, wenn das Element auf das der Pointer zeigt nicht mehr existiert.
Verfasst: 13.11.2004 16:25
von Danilo
Serge hat geschrieben:das erste problem hat sich gelöst,
tlist()\link = @tlist2()
heisst es richtig.
Das ist nicht korrekte PB-Syntax, sondern funktioniert nur
weils ein Bug ist.
Code: Alles auswählen
Structure xyz
*link.LONG
link.l
Endstructure
a.xyz
a\link = @i
a\link\l = 12
Debug a\link\l
Welches "link" nimmt er hier? Das Erste, den Pointer - und
der Code funktioniert somit.
Vertauschst Du die 2 Struktureinträge, geht es nicht mehr: Fehler.
Solltest Du nur in Zukunft beachten, falls es doch noch in
den nächsten Jahren gefixt wird und der PB-Syntax für Pointer
angepasst wird (Fred sagte mir vor einer Ewigkeit das er es
fixen wird, d.h. Dein Code läuft dann nicht mehr. Nur sagte
er nicht wann...

).
Verfasst: 13.11.2004 16:31
von Andre
@Danilo: dann werde ich mal versuchen, bei der ganzen Sache wieder etwas Druck zu machen.

Verfasst: 13.11.2004 16:33
von Serge
Ne kannst es ruhig lassen, sonst geht mein Code nimmer *g*
@Daniello:
Wie wäre denn der korrekte PB-syntax? Oder gibts nur diese "buggy" möglichkeit?
Verfasst: 13.11.2004 17:01
von Danilo
Serge hat geschrieben:Wie wäre denn der korrekte PB-syntax?
In PB werden Pointer *immer* mit dem Sternchen davor geschrieben.
Serge hat geschrieben:Oder gibts nur diese "buggy" möglichkeit?
Ja, bis es gefixt ist schon. Wollte Dich nur auf das Problem
hinweisen, dann weißt Du gleich bescheid wenn Dein Programm
dann irgendwann mal einen Fehler bringen sollte.
Brauchst dann nur bei allen Pointern ein Sternchen davor setzen, fertig.
Verfasst: 14.11.2004 11:32
von NicTheQuick
Oh, scheiße!
Wenn das geändert wird, kann ich tausende von Codezeilen in hunderten Quellcodes ändert, weil ich das nie anders gemacht habe.
Wieso wird einem das denn nicht früher gesagt??

Verfasst: 14.11.2004 11:46
von Kaeru Gaman
schreib dir dochn kleines prog...
idee:
das prog hechelt den source durch, und notiert jeden namen, den es mit sternchen davor findet in 'ner liste...
...wenn es einen dieser namen ohne sternchen findet, setzt es eins davor..
... könnte man in so ne art byte-für-byte-Kopiervorgang packen...

Verfasst: 14.11.2004 14:02
von Danilo
NicTheQuick hat geschrieben:Wieso wird einem das denn nicht früher gesagt??
Du weißt doch genau das PB-Pointer immer mit einem Sternchen
anfangen.
Bei einer Änderung sagt Dir aber PB wo genau ein Fehler ist.
Schliesslich mußtest Du den Pointer in der Struktur mit '*'
deklarieren:
Wenn dann im Code irgendwo sowas kommt:
...dann sagt Dir PB das es keinen StrukturMember "p" gibt,
und die änderst es in
Da dieser Fehler dann eindeutig ist, sollte es kein großes
Problem sein. Man weiß ja dann schliesslich auch was sich
großartig geändert hat.
Der jetzige Zustand ist alles andere als korrekt und schön.
Verfasst: 14.11.2004 16:02
von Serge
Probleme gibts dann nur wie in dem obigen von dir aufgeführtem Beispiel,
wenn die Strukur eine Variable p.l und einen Pointer *p beinhaltet :]