Integer in Liste problem

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Jan_

Ehemaliger Admin

Betreff: Integer in Liste problem

BeitragDi, Apr 03, 2007 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Apr 03, 2007 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
entweder string(int) hinzufügen oder das machen was viele machen und nutzt wrapper types Smile

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

BeitragMi, Apr 04, 2007 3:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Apr 05, 2007 8:02
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, das ist natürlich schade...
between angels and insects
 

E. Urbach

ehemals "Basicprogger"

BeitragDo, Apr 05, 2007 9:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Apr 05, 2007 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Jan_

Ehemaliger Admin

BeitragDo, Apr 05, 2007 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Apr 05, 2007 13:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Nunja, mit den TNumeric wrappern sollte es bei sinnvollen Namen für die Types denke ich sinnvoll zu lesen sein Smile

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. Urbach

ehemals "Basicprogger"

BeitragSo, Apr 08, 2007 10:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Apr 08, 2007 11:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Urbach

ehemals "Basicprogger"

BeitragSo, Apr 08, 2007 12:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 09, 2007 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Urbach

ehemals "Basicprogger"

BeitragDi, Apr 10, 2007 13:00
Antworten mit Zitat
Benutzer-Profile anzeigen
@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 Wink
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

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group