Seite 1 von 1

Verwenden von LinkedList in Prozeduren *closed*

Verfasst: 29.07.2008 01:30
von KatSeiko
Salve, werte Mitstreiter der hohen Computerkunst...

Ich habe ein Problem, dass ihr vielleicht zu lösen wisst:
Ich benutze eine LinkedList, mit der ich angemeldete verwalten möchte.
Ansich habe ich mir gedacht, dass vorerst eine Deklaration der Linked List als "Global" ausreichend sein sollte, damit ich diese in jeder Prozedir verwenden kann. Offenbar ist dem nicht so - der Compiler sagt mir, dass meine Linked List offenbar nicht initialisiert wurde. (Ist sie das nicht nach New?)

Mein Programm sieht in etwa so aus:

Code: Alles auswählen

; Server-Programmcode

InitNetwork
InitKeyboard

Structure sClients
name.s
ID.l
EndStructure

Global NewList Clients.sClients()

Declare (---Alle Prozeduren---)

PrepareServer()
Repeat
If SEvent = NetworkServerEvent()
 Select SEvent
  Case #PB_NetworkEvent_Connect
   NewClient(EventClient())
  Case #PB_NetworkEvent_Data
   WorkData(EventClient())
  Case #PB_NetworkEvent_Disconnect
   RemoveClient(EventClient())
EndIf
If KeyboardReleased(#PB_Key_Escape)
 CloseAllClients()
 End
EndIf
ForEver

(---Etliche Prozeduren---)

Procedure CloseAllClients()
ForEach Clients()
 SendNetworkString(Clients()\ID, "S#01: Server shutting down")
Next
EndProcedure
Am ForEach-Befehl kommt nun die Fehlermeldung... Edit: Falsch, siehe unten...
Wie kann ich das Ganze elegant lösen?

Verfasst: 29.07.2008 01:40
von edel
Was fuer eine Fehlermeldung bekommst du denn genau?


Laeuft der Code ?

Code: Alles auswählen

Structure sClients
  name.s
  ID.l
EndStructure

Global NewList Clients.sClients()

Procedure CloseAllClients()
  ForEach Clients()
    Debug "S#01: Server shutting down"
  Next
EndProcedure

CloseAllClients()

Verfasst: 29.07.2008 01:43
von STARGÅTE
wenn ich deinen Ausschnitt des Codes noch mal auf das wesentliche reduziere, erhalte ich keine Fehlermeldung :

Code: Alles auswählen


Structure sClients 
name.s 
ID.l 
EndStructure 

Global NewList Clients.sClients() 

Procedure CloseAllClients() 
 ForEach Clients() 
  SendNetworkString(Clients()\ID, "S#01: Server shutting down") 
 Next 
EndProcedure
sollte also funktionieren, denn du hast ja auch die Liste vor allen Proceduren definiert, bevor du sieht dort verwendest.

Verfasst: 29.07.2008 01:49
von KatSeiko
Sorry, der Code war nicht vollständig... Ich hab grad nochmal genauer nachgeschaut, in welcher Zeile der Fehler kommt (und festgestellt, dass es nicht bei der ersten Verwendung der Liste war...)
Hinter next folgt noch:

Code: Alles auswählen

ResetList(Clients())
While NextElement(Clients())
 DeleteElement(Clients())
Wend
Der Fehler wird bei ResetList ausgegeben:
[ERROR] LinkedList not initialized.

Laut Hilfe ist dieser Befehl "hilfreich, um nachher Elemente mittels NextElement abzuarbeiten".

Verfasst: 29.07.2008 02:24
von KatSeiko
Verdammt... Ich denke, da ist irgendwo anders der Wurm drin (bzw der Käfer)... Das Programm funktioniert so minimalisiert einwandfrei...