Integer in Liste problem
Übersicht

![]() |
Jan_Ehemaliger AdminBetreff: Integer in Liste problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Fehlermeldung: unable to convert from 'int' to 'object'
Code: [AUSKLAPPEN] SuperStrict
Local list1:TList = CreateList() Local list2:TList = CreateList() ListAddLast list1,"one" ListAddLast list1,"two" ListAddLast list1 , "three" ListAddLast list2 , 1 ListAddLast list2 , 2 ListAddLast list2 , 3 Local a$,b% For a$=EachIn list1 Print a$ Next For B%=EachIn list2 Print B% Next ich hoffe mal, es gibt ne möglcihkeit, integer in ne liste einzufügen, und ich muss nicht jene als Type hinterlegen. Als Object Kasten kann ich ihn auch nicht. (bzw. es nützt nix) der Fehler ist in der Zeile: ListAddLast list2 , 1 Würde mich über hilfe sehr freuen. |
||
between angels and insects |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
entweder string(int) hinzufügen oder das machen was viele machen und nutzt wrapper types ![]() Code: [AUSKLAPPEN] Type TNumeric abstract typ:int End Type Type TInt extends TNumeric value:int method new() typ = 1 end method end type type TFloat extends TNumeric value:float method new() typ = 2 end method end type type TDouble extends TNumeric value:double method new() typ = 3 end method end Type |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
- Zuletzt bearbeitet von Dreamora am Do, Apr 05, 2007 12:37, insgesamt einmal bearbeitet
![]() |
rema |
![]() Antworten mit Zitat ![]() |
---|---|---|
So würde es auch gehn...
Code: [AUSKLAPPEN] SuperStrict
Local list1:TList = CreateList() Local list2:TList = CreateList() ListAddLast list1,"one" ListAddLast list1,"two" ListAddLast list1 , "three" ListAddLast list2 , String(1) ListAddLast list2 , String(2) ListAddLast list2 , String(3) Local a$,b$ For a$=EachIn list1 Print a$ Next For b$=EachIn list2 Print Int(b$) Next |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke, das ist natürlich schade... | ||
between angels and insects |
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Liegt daran, dass Integer immer als Wert und nicht als Referenz übergeben werden, somit sind sie keine "Objekte" in dem Sinne.
Zitat: das ist natürlich schade...
Wofür brauchst du das denn? Möglicherweise gibt es einen Work-around, oder du programmierst dir einen eigenen Listen-Typ TIntList. Im einfachsten Fall sollte sogar ein Array reichen, aber ich bezweifle, dass du das nicht schon probiert hast. Der einzige Fall, in dem ich jemals einen IntWrapper benutzen musste, war einmal in C++ aufgetreten, als ich ein HWND-Handle (Int) zu einer Instanz einer Fensterklasse zuweisen musste (so wie TMap). Damals hab ich es so wie Blitz Max gemacht und einen Wrapper verwendet. Spricht etwas gegen die Verwendung oder wieso sagst du "das ist natürlich schade..."? |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jan_ hat Folgendes geschrieben: danke, das ist natürlich schade...
Nicht wirklich Denn der Preis wenn Numerics auch Objekte wären, wäre recht unschön hoch muss ich sagen weil sie dann net in der Art optimiert werden könnten, wie sie es werden ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
naja, array gehen schon, und wie es Dreamora gezeigt hat, gehts auch.
nur für meine Lösung ist es unschöb, weil auch der Code etwas geschmeidig zu lesen sein soll, ohne das mann immer nachschauen muss, was ich für Workarounds genommen habe. |
||
between angels and insects |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nunja, mit den TNumeric wrappern sollte es bei sinnvollen Namen für die Types denke ich sinnvoll zu lesen sein ![]() String würde ich übrigens nicht nutzen, auch wenn ich den vorschlag gemacht hab. Grund ist, das du beim zurück konvertieren nicht wissen kannst, was überhaupt drin war und es macht doch nen massiven unterschied obs int, float oder double war. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Auch wenn das Theman bereits beendet ist, habe ich noch eine kleine Frage und möchte dafür nicht einen neuen Thread aufmachen:
Man spricht ja in Java und in Blitz Max von Referenzen. In C++ wird zwischen Zeigern und Referenzen unterschieden. Meine Frage: Wenn man sagt, dass eine Referenz auf das Objekt übergeben wird (in BMax), wird dann einen Referenz oder ein Zeiger (im Begriffsverständnis von C++) übergeben? Mit anderen Worten: Wenn ich folgendes schreibe: Code: [AUSKLAPPEN] Local a:TNumeric = New TNumeric
DoSomethingWith(a) würde das dann äquivalent zu diesem C++ Code... Code: [AUSKLAPPEN] TNumeric *a = new TNumeric;
DoSomethingWith(a); oder äquivalent zu diesem Code sein? Code: [AUSKLAPPEN] TNumeric a;
DoSomethingWith(&a); Ich würde ja auf ersteres tippen, aber da man ja ständig von Referenzen spricht bin ich dann doch etwas verwirrt. Wenn dies zutrifft, wieso spricht man dann nicht von Zeigern? |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Variablen im stil von "Global bla:Object = New Object"(Oder halt irgendetwas, was von Object erbt) sind immer pointer, entsprechen also in C einem "Object *bla;".
Wohingegen Int,Float,... keine pointer sind, und in C genau so aussähen: "int bla;" |
||
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gut, dann verstehe ich allerdings nicht wieso man den Begriff Referenz anstatt Zeiger verwendet...
EDIT: Anscheinend gibt es keinen Grund, wenn ich mir die Resonanz zu meinem Post anschaue... |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Warum es Referenz heisst: Weil der Garbage Collector sich intern speichert wieviele Variablen auf diesen Pointer verweisen, ihn also referenzieren und im dem Sinne wie häufig das Objekt referenziert ist.
Der GC wird das Objekt dann selbstständig auslöschen wenn keine Variable mehr auf dieses Objekt verweist, also keine Referenz mehr besteht. Das nennt sich ausserhalb von C++ dann eigentlich Referenz (C#: ref keyword, VB: By Ref etc) Da C++ eine 20 jahre alte Hackersprache (im Sinne man hackt sich Code zusammen anstatt ihn korrekt zu schreiben, denn C++ macht Korrektheitsverifikation so gut wie unmöglich) ist die alles möglich erlaubt gibt es dort keine Referenzen. Das einzige was dort dem Nahe kommt sind SmartPointer, welche in professionelleren Software Systemen genutzt werden, aber von viel zu vielen want-to-be Pros verpöhnt werden. Es gibt in BM intern keine Pointer. Es gibt zwar immer Mal wieder "intelligente" Leute die glauben VarPtr wär dazu da, intern in BM pointerlike zu arbeiten. Die lernen dann allerdings normalerweise recht schnell das VarPtr, Byte Ptr etc für Extern da sind nicht für intern, denn der GC macht bei dem Spielchen nicht übermässig lange mit und kommt gern Mal mit ganz interessanten GC Fehlermeldungen die weder gecatched noch sonstwie abgefangen werden können und zum instant Tod des Programmes führen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Dreamora: Vielen Dank für die ausführliche Erklärung, wusste nicht dass der Begriff wegen dem GC-Zusammenhang benutzt wird.
Zitat: denn der GC macht bei dem Spielchen nicht übermässig lange mit und kommt gern Mal mit ganz interessanten GC Fehlermeldungen die weder gecatched noch sonstwie abgefangen werden können und zum instant Tod des Programmes führen.
Da kann ich dir zustimmen, besonders unter Vista führt das häufig zu Abstürzen und seltsamen Fehlermeldungen. Diese Erfahrung musste ich bei meiner IDE machen, als ich Byte Ptr für die WinAPI-Clipboard-Befehle benutzt habe. Erst später hatte ich GadgetCopy entdeckt, na ja, wieso einfach wenn's auch kompliziert geht ![]() |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group