noch ne Type Macke...
Übersicht

![]() |
EPSBetreff: noch ne Type Macke... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi zusammen...
also so langsam fange ich an die Types zu hassen ![]() Nein, nur Spaß eigentlich sind sie recht praktisch, aber ihre Eigenheiten finde ich schon etwas merkwürdig. Neuestes Beispiel: Ich habe zwei Type Felder. Bisher war ich der Annahme das es nur auf den Namen des Types und seine "Field Eigenschaften" ankommt wenn man mit dem Type arbeiten möchte, aber das war/ist ein Irrtum. Ebenso wichtig ist die Variable die man vorne anstellt. Zum besseren Verständnis hier mal ein kleines Beispiel: Code: [AUSKLAPPEN] Type Helmut
Field Zahl End Type Type Wolfgang Field Wert End Type Name.Helmut = New Helmut Name\Zahl = 100 Feld.Wolfgang = New Wolfgang Feld\Wert = 200 For Bsp.Helmut = Each Helmut Print Bsp\zahl Next For Bsp.Wolfgang = Each Wolfgang Print Bsp\wert Next ;For So.Wolfgang = Each Wolfgang ; Print So\Wert ;Next Wenn man das Beispiel so startet bekommt man den Fehler Variable type mismatch. Stattdessen sollte man die REM vor der letzten Routine wegnehmen und REM bei der vorhergehenden setzen damit es funzt. Wohl kaum ein Bug, weil nach ein wenig Nachdenken doch einleuchtend, aber für mich (und vielleicht auch andere) im ersten Moment etwas unverständlich, schließlich arbeitet man ja mit dem Feld und nicht der "Arbeitsvariablen" die man für die FOR NEXT vorne anstellt. Warum ich das überhaut erwähne? Weil ich in einem ähnlichen Fall auch einmal keinen Fehler bekam, sondern scheinbar alles funktionierte, jedoch der ausgelesene Wert des Types nicht aus dem zweiten, sondern aus dem ersten Type Feld stammte...und das ist ein Fehler den ich niemandem Wünsche...danach sucht man sich nämlich dumm und dusselig ![]() |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, ist aber klar, du kannst ja nciht den Variablentype life ändern, wer das macht, gehört bestraft!
Type Person Field Name$ EndType Type Wert Field Owner.Person Field Zahl End Type Ist ne Möglichkeit, womit du verschiedenen Personen verscheidenes Zuweißen kannst. |
||
between angels and insects |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bsp wird beim ersten aufruf von einem Type Deklariert. Danach kann dieser Type leider nicht mehr geändert werden ( nein das ist weder ein intelligentes verhalten noch wirklich akzeptabel aber man gewöhnt sich dran ).
Allerdings hat bei mir der Compiler noch jedes Mal gemotzt, auch wenn es mir lieber wäre, wenn er dieses non-redifinition kindergehabe endlich mal verlernen würde ... Das schlimme ist vor allem, dass dieses Verhalten nicht für eine Funktion oder so abgeschlossen ist, sondern dass sich das über eine gesammte Sourcefile so blockt. Ist etwa gleich hohl wie das er nicht in der Lage ist GoSub richtig zu verarbeiten. Sprich wenn die Sub unterhalb des Mainsources steht wirst du massenhaft variablenfehler und deklarationsfehler davontragen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dreamora hat Folgendes geschrieben: Das schlimme ist vor allem, dass dieses Verhalten nicht für eine Funktion oder so abgeschlossen ist, sondern dass sich das über eine gesammte Sourcefile so blockt. Wie meinst du das?Code: [AUSKLAPPEN] Type test
klappt doch, verstehe ich dich falsch?
End Type Type test2 End Type Function t1() bla.test = New test End Function Function t2() bla.test2 = New test2 End Function @EPS: Ist doch normal, Code: [AUSKLAPPEN] For i% = 0 To 10
klappt doch genauso wenig...
Print i Next For i# = 0 To 10 Print i Next |
||
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Zitat: Code: [AUSKLAPPEN] Type test End Type Type test2 End Type Function t1() bla.test = New test End Function Function t2() bla.test2 = New test2 End Function Es gibt einen Unterschied zwischen lokal und global... Edit: Sorry, das war ein Mistverständniss. ![]() grüße |
||
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dass es bei globalen Variablen nicht funktioniert, hatte ich eigentlich für noch logischer gehalten... | ||
Jake |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es ist auch ganz sinnvoll, Variablen innerhalb der Funktion mit local zu definieren. Damit kriegt man auch Fehlermeldungen, wenn es zufällig eine global gleichen Namens geben sollte. Macht man das nicht, kann das zu sehr komischem Programmverhalten führen.
Ist mir schon öfters passiert! Und das sind so Fehler, die sucht man Tagelang ![]() |
||
bittrap-software. Jetzt neu und mit noch mehr Kalorien: CandyFactory 2 ! |
Apocalyptic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jake hat Folgendes geschrieben: Es ist auch ganz sinnvoll, Variablen innerhalb der Funktion mit local zu definieren. Damit kriegt man auch Fehlermeldungen, wenn es zufällig eine global gleichen Namens geben sollte.
Bei mir kam da noch nie ne Fehlermeldung... Code: [AUSKLAPPEN] Global Blubb=10
Print Bla() WaitKey() Function Bla() Local Blubb=5 Return Blubb End Function |
||
Suum cuique
[ www.ffs-net.de.vu ] [ Raycaster ] |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich halte das für ganz normal. Geht doch auch in jeder anderen Sprache nicht, oder?
Wäre ja ungefähr das selbe wie Code: [AUSKLAPPEN] struct bla { int a; } struct bla2 { int a; } struct bla Objekt; struct bla2 Objekt; //Gleicher name "Objekt" 2 mal Da die beiden Strukturen den selben Aufbau haben wäre es kein Problem einem bla ein bla2 zuzuordnen und umgekehrt in dem man einen cast macht. Aber ich kann doch die Variable selber die von diesem Typ ist nicht einfach redefinieren, oder ist das in c++ doch möglich? Ich glaube nicht. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
In C gehts net.
In Basic und anderen Sprachen gehts aber. In C kannst du auch Arrays net redimen, von daher hinkt der vergleich ![]() Das Problem an diesem Dim / Redim ist das der Compiler linear arbeitet. Wenn du also ganz oben ein Gosub hast auf eine Sub die alle deklarationen hat und ganz unten steht, dann geht zb garnix, weil der compiler nicht fähig ist den code vor dem compilen entsprechend zusammenzubauen. In solchen Fällen bin ich jeweils relativ froh darüber das ich Protean besitze. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Geht das in Basic mit jeder Variable, mal abgesehen von Blitz jetzt?
Wenn ja, dann hab ich wieder was dazu gelernt ![]() Bei Arrays war es mir bekannt, aber das ist ja im Grunde nicht redefinieren nur redimensionieren. Obwohl das natürlich intern auch einer Art redefinition gleich kommt ![]() |
||
![]() |
VirtualDreams |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, nun ja. ich finde diesen compiler schon das letzte für die tolle detailierte fehlermeldung: memory access violation. aber nun zum eigentlichen: Ich finde es schwach - wie von jeder basic sprache - das man variablen nicht explizit deklarieren muß, sowas ist viel zu fehleranfällig. nur mal so als beispiel: a% = "b" - und das akzeptiert er ohne maulen, schon bei sowas müßte der compiler dir ins gesicht springen. und so geht das mit vielen anderen kleinigkeiten weiter. zudem vermisse ich variable arrays, die ich per index ansprechen kann.
aber wie dem auch sei, ändern wird sich das nie - leider - und es ist unnütz sich darüber aufzuregen... |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
VirtualDreams hat Folgendes geschrieben: Hmm, nun ja. ich finde diesen compiler schon das letzte für die tolle detailierte fehlermeldung: memory access violation. Wie wärs wenn Du den Debugger anstellst? Damit gibts auch vernünftige Meldungen ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
VirtualDreams |
![]() Antworten mit Zitat ![]() |
---|---|---|
naja, so detailliert sind diese nun dort auch wieder nicht. ich vermisse tunlichst ein step by step debugger... | ||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist es das was Du willst:Code: [AUSKLAPPEN] Stop
Starten und mit dem Pfeil nachg rechts im Debuggerfenster Zeile für Zeile durchgehen. Step by step Print "Test" a=3 TileImage bla,100,10000000 ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
VirtualDreams |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich weiß ja nicht ob die effiktiverweise nach jedem befehl ein stop einfügen willst, und das bei vlt noch mehr als tausend codezeilen... ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group