Erstellen eines Types.
Übersicht

SharkBetreff: Erstellen eines Types. |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi Community,
zurzeit plagt mich ein Fehler den ich überhaupt nicht wegbekomme. Hier mal ein kleiner Code ausschnitt ![]() Der Type: Code: [AUSKLAPPEN] Type Server Field Stream:TUDPStream Field Port:Int Method Create:Server(wPort:Int) Local t:Server = New Server t.init(wPort:Int) Return t End Method Method init(FPort:Int) DebugLog FPort AppTitle = "Server ver." + Version Graphics (800 , 600 , 0 , 60 , GRAPHICS_BACKBUFFER) Stream = New TUDPStream If Not stream.init() Then Notify"Stream:Error Number 1" End EndIf Stream.SetLocalPort(FPort:Int) DebugLog "Server gestartet" End Method End Type Der Code mit dem Fehler: Code: [AUSKLAPPEN] KServer:Server = KServer.Create(Port:Int)
Fehlermeldung: Unhandled Exception: Attempt to access field or method of Null object Anmerkung: KServer:Server ist Global und eine andere Sache ist mir noch aufgefallen. Wenn ich es so schreiben " Global KServer:Server = Server.Create(8000) ", dann funktioniert es einwandfrei, doch ich will dies nicht schon am Anfang des Codes ausführen, sondern in einer Schleife. Bin für jede Hilfe dankbar. mfg Shark |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es gibt keine Klasse KServer
Du kannst Funktions nur auf der Klasse aufrufen, nicht auf Objekten, dort kannst du nur Methoden ausführen. Und wieso solltest du den Server in einer Loop immer wieder neu erzeugen wollen? seh ich da net so ganz ... net ma die ganze zeit Init aufrufen macht da wirklich noch nen sinn |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Shark |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oohhh ![]() Ich hab da ausversehen aus Verzweilfung alles ausprobiert und deshalb steht da noch Method Create:Server(Port:int), aber es soll eine Function sein. Code: [AUSKLAPPEN] Function Create:Server(wPort:Int)
Dennoch löst dies nicht mein problem! Obwohl es meiner Ansicht nach richtig ist, denn als erstes wird auf die Function zugegriffen, die dann ein Type erstellt und dann wird mit einer Method auf dem Type weiter gearbeitet. Zitat: Und wieso solltest du den Server in einer Loop immer wieder neu erzeugen wollen?
Da hab ich mich wohl falsch ausgedrückt... aber vorher hab ich noch etwas Code, beidem einige Sachen abegefragt werden und diese werden zu einer Function weiter gegeben. Aber ich kann doch nicht in einer Function Global schreiben. mfg Shark |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du zu Anfang keine Instanz erzeugen willst, darfst du halt keine Methode Create aufrufen sondern musst eine statische Funktion Create erstellen. Das hast du schon richtig erkannt.
Code: [AUSKLAPPEN] SuperStrict
Framework BRL.Blitz Import Vertex.BNetEx Type TServer Field Stream : TUDPStream Field Port : Short Method Init(Port:Short) Self.Stream = New TUDPStream If Not Self.Stream.Init() Then .. Throw("Error Number 1") If Not Self.Stream.SetLocalPort(Port) Then .. Throw("Error Number 2") Self.Port = Self.Stream.GetLocalPort() DebugLog("Server started successfull") End Method Function Create:TServer(Port:Short) Local Server : TServer Server = New TServer Server.Init(Port) Return Server End Function End Type Local Server : TServer ' Server ist hier noch Null! Try Server = TServer.Create(1234) Catch Exception : Object WriteStdout("~nError:~n " + Exception.ToString() + "~n") End Try ' Erst hier ist Server eine gültige Referenz auf eine Instanz von TServer End mfg olli |
||
vertex.dreamfall.at | GitHub |
Shark |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke schön.
Es klappt jetzt alles. Das Problem war, dass ich Server schon als TGadget [Combobox] definiert habe, was anscheind zu Problemen führt, wenn man Server, dann noch als Type bezeichnet. ![]() Ansonsten geht mein Code ![]() Danke für die Hilfe! |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aus dem Grund hat sich eigentlich bei allen BM Usern eingebürgert Types mit T oder C beginnen zu lassen (T für Type, C für Class).
Damit umgeht man das Problem |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group