Dynamisches Array mit Bereichen
-
-
-
meinst du sowas :
Code
Alles anzeigenDeclare Memory tarray[], Daten Declare num&, nam$ Struct str = Nummer&, Name$(10) Dim tarray[], str Dim Daten, str Cls WhileLoop 0, 5 tarray[&LOOP] = Daten Locate 1,1 : Print "Nummer :" Locate 1,9 : Input num& tarray[&LOOP].Nummer& = num& Locate 2,1 : Print "Name :" Locate 2,9 : Input nam$ tarray[&LOOP].Name$ = nam$ EndWhile Print "für Ausgabe Taste drücken..." WaitKey WhileLoop 0, 5 Print tarray[&LOOP].Nummer&, tarray[&LOOP].Name$ EndWhile Print Print "------------ ENDE----------------" WaitKey Dispose tarray[] End
Steht auch in der Hilfe bei
Arrays von Strukturen und KlassenMußte nur den Umweg über zwei einzelne Variablen gehen.
Mit
Input tarray[&LOOP].Nummer&
direkt scheint es nicht zu gehen. Zumindest kommt bei mir
die Fehlermeldung, daß es das Element nicht gibt.
Warum auch immer ?
PS: Mit SizeOf kannst du dann die Anzahl der Elemente erfragen. -
Nein, das klappt irgendwie nicht.
-
Aus der Hilfe:
"Hinweis: Mit New kann man jedem Element eines Arrays eine andere Struktur und/oder eine andere Klasse zuweisen. So ist also ein Array möglich, das unterschiedliche Strukturen und Klassen enthält."
So geht's:
Code
Alles anzeigencls Class Figur = Name$(20), X%, Y%, Richtung%, Tempo% Class Ort = Name$(20), X%, Y% Class Raum = Nr%, Name$(10), Inhalt$(40) Declare Mem Bereich[] Bereich[1] = New(Figur) Bereich[5] = New(Figur) Bereich[10] = New(Ort) Bereich[99] = New(Raum) Print ClassOf(Bereich[1]) Print ClassOf(Bereich[2]) Print ClassOf(Bereich[5]) Print ClassOf(Bereich[10]) Print ClassOf(Bereich[99]) Bereich[5].Name$ = "Clara" Print Bereich[5].Name$ waitinput
Wenn alle Elemente des Bereichs die gleiche Struktur oder die gleiche Klasse haben sollen, geht auch ein "DIM Bereich[], Struktur/Klasse".
("DIM Bereich[x], Struktur/Klasse" geht nicht. Hier ist dann eben "Bereich[x] = New(Struktur/Klasse)" zu verwenden. Und sollte die Klasse einen Konstruktor haben, können mit NEW gleich die Initialisierungsparameter übergeben werden.)Gruß
Roland -
Aha, vielen Dank. Mein Fehler war, dass ich zu sehr an Dim gegangen habe.
Danke, probiere ich aus sobald ich Zeit habe.
-
Hallo Roland,
dein Beispiel aus der Hilfe geht aber auch nicht :Code
Alles anzeigenDeclare Mem Lohn[] Class Mitarbeiter = Name$(30), Vorname$(30), Gehalt!, Mitarbeiter Proc Mitarbeiter.Mitarbeiter Parameters String Name, Vorname, Double Gehalt .Name$ = Name .Vorname$ = Vorname .Gehalt! = Gehalt EndProc Lohn[10] = New(Mitarbeiter, "Hülsmann", "Roland", 4234.56) Print Lohn[10].Name$ Print Lohn[10].Vorname$ Print Lohn[10].Gehalt! WaitKey Dispose Lohn[] End
Fehlermeldung : <<<die beerbte Klasse muß an erster Stelle stehen.>>>
Wenn ich es jetzt umdrehe :
Class Mitarbeiter = Mitarbeiter, Name$(30), Vorname$(30),Gehalt!
wird auch nichts angezeigt, außer Gehalt! mit 0.000.Da muß ja irgendwas nicht funktionieren.
Wahrscheinlich hat das bisher noch keiner bemerkt, weil es noch keiner benutzt hat.
Oder fehlt da noch was ? -
Da ist ein "@" verloren gegangen. Es muss natürlich heißen:
Class Mitarbeiter = Name$(30), Vorname$(30), Gehalt!, Mitarbeiter@
Mitarbeiter@ ist eine Methode. In diesem Fall, da sie den gleichen Namen wie die Klasse hat, der Konstruktor.
Gruß
Roland(muss wohl die gestern fertg gewordene Hilfe für X4 noch einmal korrigieren)
-
Hättest du auch noch ein Beispiel für einen Bereich# ?
Long .bereich#, 0 = b geht wohl in der Proc nicht,
auch nicht als vollständig : Mitarbeiter.bereich#, 0Bereich# ist in der Klasse mit 4 Byte definiert und wird
in der Proc mit einem Long-Parameter (b) gefüllt. -
Da fällt mir gerade ein: Könnte man Struct nicht komplett abschaffen? Alles was Struct kann ist in Class enthalten und wenn ich im Programm jedes Struct durch Class ersetze kommt am Ende das Selbe raus, oder sehe ich das falsch?
-
Oder Struct in künftigen Versionen einfach auf Class mappen ....
-
Oder Struct in künftigen Versionen einfach auf Class mappen ....
Vielleicht wird das ja schon gemacht.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!