Deutsch
Forum

Mein Hund hat eine Tasche (Arrays in Klassen)

 
- Seite 1 -



Dean
Wood
Hallo,
ich suche nach einer Möglichkeit Arrays an eine Instanz zu binden, ausgehend vom Beispiel in der Doku:
Class Hund = Geburtsdatum$(10), \
Rasse$(32),        \
Groesse%,          \
bellen@, \
tasche$[8,1]

Leider scheint dass nicht zu funktionieren, vielleicht habt ihr eine Lösung auf die ich gerade nicht komme.

DeanWood.
 
Phantasie ist nicht Ausflucht. Sich etwas vorstellen heißt, eine Welt bauen, eine Welt erschaffen. Eugène Ionesco
23.01.2013  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »


RGH
Oh, da waren sogar noch einige Fehler drin, die mir eben aber auch nicht auffielen:

1. Die Konstruktor-Methode muß auch in der Methodenliste der Klassendefinition stehen. Wenn nicht, wird sie nie aufgerufen. .id& hat dann also 0 und es wird dann ab XProfan X2 die ListboxListe genutzt. Bei XProfan 11 war das noch nicht der Fall und somit resultiert Deine Fehlermeldung. Da .sache& dann auch 0 ist ...

2. Die Methode Inhalt hat einenm Parameter. Dieser sollte im Hauptprogramm auch angegeben werde, Du willst den ersten Eintrag sehen? Dieser hat den Index 0. So funktioniert es auch mit XProfan 11:
Class Tasche = sache&,\
id&, \
tasche@,\
hinzu@,\
inhalt@

proc Tasche.Tasche

    .sache& = Create("List",1)
    .id& = Create("List",1)

endproc

proc Tasche.hinzu

    parameters idnr$,bzsache$
    @AddString(.id&,idnr$)
    @AddString(.sache&,bzsache$)

endproc

proc Tasche.inhalt

    parameters idnr%
    declare zeile$,zeile2$
    zeile$ = @GetString$(.sache&,idnr%)
    zeile2$ = @GetString$(.id&,idnr%)
    zeile$=zeile$+":"+zeile2$
    return zeile$

endproc

CLS
declare TobysTasche#
TobysTasche# = @New(Tasche,1,1)
TobysTasche#.hinzu("1","Knochen")
Print TobysTasche#.inhalt(0)
waitinput

Gruß
Roland
 
XProfan X2
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
24.01.2013  
 



Ich saaach mal es ist wie es ist -

es gibt in XProfan keine Arrays als Eigenschaft/ Element einer Klasse.

Nimm vlt. einfach ein Long und im Konstruktur ein CreateList.
 
23.01.2013  
 



Schau mal zum Thema Text-Adventure hatte ich vor Jahren mal was...  [...] 

Müsste natürlich auf aktuelles XProfan angepasst/ umgeschrieben werden.
 
23.01.2013  
 




Dean
Wood
Danke, dann such ich jetzt nicht mehr verzweifelt in die falsche Richtung und kann nach anderen Lösungen ausschau halten, wie die von dir vorgeschlagene.

Wenn es nicht all zu viel Platz in der Tasche des Hundes gibt, kann man es ja auch statischer angehen fällt mir gerade ein, zum Beispiel:

In einem mehrdimensionalen Array was man woanders definiert kann man ja dann alle "Dinge" einer eindeutigen Bezeichnung zuordnen und somit dann die Bindung an die jeweilige Instanz bewirken. Wäre zwar ein wenig umständlich müsste aber funktionieren.

DeanWood.

Nachtrag:
Unsinn *klatschmirvordenKopf* wenn jeder Hund eine Tasche besitzt und alle Hunde namentlich bekannt sind, wie wärs denn mit einer Klasse für Taschen ;)
Herje heute fallen bei mir die Groschen aber auch Pfennigweise
 
Phantasie ist nicht Ausflucht. Sich etwas vorstellen heißt, eine Welt bauen, eine Welt erschaffen. Eugène Ionesco
23.01.2013  
 



Ist schon richtig. Ein nicht dynamisches mehrdimensionales Array (also mit statischer
Größe) lässt sich aber auch leicht mit einem eindimensionalem Array herbilden.

Statt 8,2 quasi 16.
 
23.01.2013  
 




Dean
Wood
Hmm jetzt bin ich aber am grübeln wieso ich mir ein eindimensionales Array herbeibilden sollte, meine Logik ging in die Richtung:

Sache$[0,0]= ID
Sache$[0,1]= Bezeichnung

Das lässt sich dann besser abfragen fand ich.

In der Instanz stünde dann eben unter
PlatzEins zum Beispiel der Wert von Sache[0,0] drin.

Deanwood.
 
Phantasie ist nicht Ausflucht. Sich etwas vorstellen heißt, eine Welt bauen, eine Welt erschaffen. Eugène Ionesco
23.01.2013  
 



Das wäre quasi gleichbedeutend mit:

Class Hund = Geburtsdatum$(10), \
Rasse$(32), \
...
sachen_bezeichnung&,\
sachen_wert&,\
...
bellen@, \

und im Konstruktor für die 2 sachen_ ein createList.

So ist immer getString$(this->sachen_bezeichnung&,id) leicht auch der Wert per
getString$(this->sachen_wert&,id) ermittelbar -

also wie ein 2 dimensionales Stringarray nur eben 2 Stringarrays.

So sind alle Eigenschaften der Sachen über den selben Schlüssel/ ID erreichbar
nur eben aus 2 verschiedenen Arrays.
 
23.01.2013  
 




Dean
Wood
Irgendwie sehe ich den Vorteil nicht, die Lösung wäre immernoch statisch da ja auf zwei statische eindimensionale Arrays zugegriffen werden würde und wenn man dies innerhalb der Klasse macht würde man ja dann

...
sachen_platzEins_bezeichnung&,\
sachen_platzEins_wert&,\
sachen_platzZwei_bezeichnung&,\
sachen_platzZwei_wert&,\

...

denn der Hund hat ja mehrere Sachen dabei auf die zugegriffen werden soll aber vielleicht ist es heute auch zu spät und ich kapiers einfach nicht mehr ;)

DeanWood.
 
XProfan 9
Phantasie ist nicht Ausflucht. Sich etwas vorstellen heißt, eine Welt bauen, eine Welt erschaffen. Eugène Ionesco
23.01.2013  
 



Der "Vorteil" wäre einfach das Du beliebig viele Sachen mitschleppen kannst und nur
pro Eigenschaft einer Sache eine Liste brauchst.
 
23.01.2013  
 




Dean
Wood
Jetzt hab ich es geschnallt, in der Klasse wird eine Liste aus zwei eindimensionalen Arrays erzeugt, dadurch dass die Liste innerhalb der Klasse erstellt wird ist sie dynamisch als auch Instanzgebunden und somit erweiterbar, was letztlich zur Folge hat dass ich die einzelnen Plätze nicht mehr mit eigenen Variablen deklarieren muß.

Ich sag doch, es dauert ein wenig länger bei mir heute ^^

Danke,
DeanWood.
 
Phantasie ist nicht Ausflucht. Sich etwas vorstellen heißt, eine Welt bauen, eine Welt erschaffen. Eugène Ionesco
23.01.2013  
 




Dean
Wood
Ich hab hier wie verzweifelt nach createList gesucht, bis ich feststellte dass es die Funktion nur mittels XPSE gibt
 
XProfan 9
Phantasie ist nicht Ausflucht. Sich etwas vorstellen heißt, eine Welt bauen, eine Welt erschaffen. Eugène Ionesco
23.01.2013  
 



Löl. Nicht ganz. Nativ heist die Funktion in xpse createList in nProcs und die nicht-
native Variante heist in XProfan einfach create("List",...

Als xpse-Nutzer kann man aber auch im nicht-nativen Bereich createList schreiben
wie auch createWindow oder createText etc. da er dies automatisch nach create("...
umwandelt.
 
23.01.2013  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

20.463 Betrachtungen

Unbenanntvor 0 min.
Langer02.01.2021
RudiB.16.04.2020
Jörg Sellmeyer19.05.2018
lange-jens03.12.2013
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

Dean Wood (13x)
iF (9x)
RGH (2x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie