Für allgemeine Fragen zur Programmierung mit PureBasic.
MenschMarkus
Beiträge: 229 Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS
Beitrag
von MenschMarkus » 17.08.2014 14:14
Hallo zusammen,
versuche gerade aus einer Prozedur mit einer Linked List an eine weitere Prozedur diese Linked List zu übergeben. Leider muss die zweite aufrufende Prozedur vor der aufgerufenen liegen.
Das Problem ist, dass ich nicht weiss welchen Parameter ich bei der Deklaration angeben muss.
Code: Alles auswählen
Declare Prozedur2(List) ;funktioniert nicht
Declare Prozedur2(List LinkedList()) ;funktioniert auch nicht
Declare Prozedur2(LinkedList());was soll ich sagen, auch nicht...usw.
Declare Prozedur2(value.l) ;funktioniert ebenfalls nicht
Hat jemand eine Idee?
LG
menschmarkus
Zuletzt geändert von
MenschMarkus am 19.08.2014 21:25, insgesamt 1-mal geändert.
Wissen schadet nur dem, der es nicht hat !
NicTheQuick
Ein Admin
Beiträge: 8837 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200 Ubuntu 24.04.2 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Beitrag
von NicTheQuick » 17.08.2014 14:18
Also ich sehe hier kein Problem:
Code: Alles auswählen
Declare proc2(List liste.i())
Procedure proc1()
Protected NewList liste.i()
proc2(liste())
EndProcedure
Procedure proc2(List liste.i())
EndProcedure
proc1()
Nino
Beiträge: 1300 Registriert: 13.05.2010 09:26
Wohnort: Berlin
Beitrag
von Nino » 18.08.2014 15:05
MenschMarkus hat geschrieben: Das Problem ist, dass ich nicht weiss welchen Parameter ich bei der Deklaration angeben muss.
Alle.
CodeCommander
Beiträge: 213 Registriert: 02.03.2014 16:06
Beitrag
von CodeCommander » 18.08.2014 15:10
Besser wäre es "eigentlich" wenn man nur den Prozedurennamen bei der Deklaration angibt
sonst gibt es Redundanz und man muss die Parameter zwei mal anpassen wenn man zb. einen neuen Parameter hinzufügt.
Hat das jemand schon mal im englischen Forum vorgeschlagen? Ich mag redundanten Code nicht.
Zuletzt geändert von
CodeCommander am 18.01.2015 14:28, insgesamt 1-mal geändert.
~ DELETE ~
Nino
Beiträge: 1300 Registriert: 13.05.2010 09:26
Wohnort: Berlin
Beitrag
von Nino » 18.08.2014 15:18
CodeCommander hat geschrieben: Besser wäre es "eigentlich" wenn man nur den Prozedurennamen bei der Deklaration angibt
Dann würden aber entscheidende Informationen fehlen.
Tommy
Spassvogel
Beiträge: 319 Registriert: 17.10.2013 14:36
Beitrag
von Tommy » 18.08.2014 15:19
Hi CodeCommander
Du kannst es mit Macros lösen. Ist zwar nicht sauber bzw. nicht übersichtlich aber immerhin :
Code: Alles auswählen
Macro Proc_Params
Param1, Param2, Param3
EndMacro
Declare Proc (Proc_Params)
Proc (1, 2, 3)
Procedure Proc (Proc_Params)
ProcedureReturn
EndProcedure
Zuletzt geändert von
Tommy am 27.01.2015 11:05, insgesamt 2-mal geändert.
PB 5.41 x64
X0r
Beiträge: 2770 Registriert: 15.03.2007 21:47
Kontaktdaten:
Beitrag
von X0r » 18.08.2014 15:38
Besser wäre es "eigentlich" wenn man nur den Prozedurennamen bei der Deklaration angibt
Nein, gerade Parameternamen sind redundant. Für eine Funktionssignatur ist es eigentlich unerheblich, welche Namen sich der Programmierer zusammendenkt. Wichtig sind die Anzahl der Parameter sowie die jeweiligen Datentypen.
MenschMarkus
Beiträge: 229 Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS
Beitrag
von MenschMarkus » 19.08.2014 21:07
NicTheQuick hat geschrieben: Also ich sehe hier kein Problem:
Code: Alles auswählen
Declare proc2(List liste.i())
Procedure proc1()
Protected NewList liste.i()
proc2(liste())
EndProcedure
Procedure proc2(List liste.i())
EndProcedure
proc1()
Hallo Nic,
schön wär's wenns auch funktionieren würde. Ich erhalte die Fehlermeldung:
LinkedList stimmt nicht mit dem Prozedur-Parameter überein.
Hier mal der komplette Testcode:
Code: Alles auswählen
Structure TestListe
Wert1.s
Wert2.s
Wert3.s
EndStructure
Declare ListInProcedure(List Liste.l())
Procedure MakeList()
NewList Liste.Testliste()
AddElement(Liste())
Liste()\Wert1 = "Wert1"
Liste()\Wert2 = "Wert2"
Liste()\Wert3 = "Wert3"
FirstElement(Liste())
Debug "Prozedur 1:"
Debug Liste()\Wert1
Debug Liste()\Wert2
Debug Liste()\Wert3
Debug "Listenende"
Debug " "
ListInProcedure(Liste())
Debug "Zurück in Prozedur 1!"
; FirstElement(Liste())
ForEach Liste()
Debug Liste()\Wert1
Debug Liste()\Wert2
Debug Liste()\Wert3
Next
Debug "Listenende"
Debug " "
EndProcedure
Procedure ListInProcedure(List GotListe())
AddElement(GotListe())
GotListe()\Wert1 = "Wert4"
GotListe()\Wert2 = "Wert5"
GotListe()\Wert3 = "Wert6"
FirstElement(GotListe())
Debug "Innerhalb der Prozedur 2:" ;Hier kann man natürlich ForEach einsetzen ;-)
Debug GotListe()\Wert1
Debug GotListe()\Wert2
Debug GotListe()\Wert3
NextElement(GotListe())
Debug GotListe()\Wert1
Debug GotListe()\Wert2
Debug GotListe()\Wert3
Debug "Listenende"
EndProcedure
MakeList()
Wissen schadet nur dem, der es nicht hat !
mk-soft
Beiträge: 3902 Registriert: 24.11.2004 13:12
Wohnort: Germany
Beitrag
von mk-soft » 19.08.2014 21:14
Der Type der Liste muss mit angegeben werden...
Code: Alles auswählen
Structure TestListe
Wert1.s
Wert2.s
Wert3.s
EndStructure
Declare ListInProcedure(List GotListe.TestListe())
Procedure MakeList()
NewList Liste.Testliste()
AddElement(Liste())
Liste()\Wert1 = "Wert1"
Liste()\Wert2 = "Wert2"
Liste()\Wert3 = "Wert3"
FirstElement(Liste())
Debug "Prozedur 1:"
Debug Liste()\Wert1
Debug Liste()\Wert2
Debug Liste()\Wert3
Debug "Listenende"
Debug " "
ListInProcedure(Liste())
Debug "Zurück in Prozedur 1!"
; FirstElement(Liste())
ForEach Liste()
Debug Liste()\Wert1
Debug Liste()\Wert2
Debug Liste()\Wert3
Next
Debug "Listenende"
Debug " "
EndProcedure
Procedure ListInProcedure(List GotListe.TestListe())
AddElement(GotListe())
GotListe()\Wert1 = "Wert4"
GotListe()\Wert2 = "Wert5"
GotListe()\Wert3 = "Wert6"
FirstElement(GotListe())
Debug "Innerhalb der Prozedur 2:" ;Hier kann man natürlich ForEach einsetzen ;-)
Debug GotListe()\Wert1
Debug GotListe()\Wert2
Debug GotListe()\Wert3
NextElement(GotListe())
Debug GotListe()\Wert1
Debug GotListe()\Wert2
Debug GotListe()\Wert3
Debug "Listenende"
EndProcedure
MakeList()
MenschMarkus
Beiträge: 229 Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS
Beitrag
von MenschMarkus » 19.08.2014 21:23
HA,
kaum macht man es richtig, funktioniert's
Danke mk-soft
edit:
sollte man ggf. mit in die PB Hilfe aufnehmen !!
Wissen schadet nur dem, der es nicht hat !