Erstellen eines Types.

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Shark

Betreff: Erstellen eines Types.

BeitragSa, Jan 12, 2008 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Community,
zurzeit plagt mich ein Fehler den ich überhaupt nicht wegbekomme.
Hier mal ein kleiner Code ausschnitt Very Happy
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

BeitragSa, Jan 12, 2008 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jan 12, 2008 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Oohhh Embarassed
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

BeitragSa, Jan 12, 2008 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jan 12, 2008 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Embarassed

Ansonsten geht mein Code Very Happy

Danke für die Hilfe!
 

Dreamora

BeitragSo, Jan 13, 2008 6:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group