Liste an Procedur übergeben [Gelöst]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Micky91
Beiträge: 35
Registriert: 06.11.2013 19:35

Liste an Procedur übergeben [Gelöst]

Beitrag von Micky91 »

Moin,
versuche verzweifelt eine Liste an eine Prozedur zu übergeben, aber irgendwas mache ich wohl noch falsch.
Mittlerweile bekomme ich noch folgende Meldung:

Code: Alles auswählen

Zeile XY: Declare doesn’t match with real Procedure
Heißt das die Deklaration der Prozedur ist nicht richtig?
Dazu etwas Beispiel-Code:

Code: Alles auswählen

EnableExplicit

; Declare Structures
Structure sPerson
   Name.s
   Vorname.s
EndStructure

; Declare Procedures
Declare InsertIntoDatabase(Person)   

Procedure Read_Liste()
 
  NewList Person.sPerson()
 
  AddElement(Person())
  Person()\Name     = "Person1"
  Person()\Vorname     = "Vorname Person1"
 
  AddElement(Person())
  Person()\Name     = "Person2"
  Person()\Vorname     = "Vorname Person2"

  ForEach Person()
     Debug "Name: " + Person()\Name
     Debug "Vorname: " + Person()\Vorname

     ; Insert to Database
     InsertIntoDatabase(Person())
   Next
  
 EndProcedure
 
Procedure InsertIntoDatabase(List Person())
 
  If OpenDatabase(0, DatabaseFile$, "", "")
    Debug "Datenbankfile geöffnet"
    Debug Person()\Name
    ;......
  EndIf
EndProcedure

;Main
Read_Liste()
Zuletzt geändert von Micky91 am 19.11.2013 13:29, insgesamt 2-mal geändert.
PureBasic 5.72 (x64) | Mac OSX 10.15.6
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Re: Liste an Procedur übergeben

Beitrag von Lord »

Warum erklärst Du eine Struktur mit Strings als Long?
Bild
Benutzeravatar
Micky91
Beiträge: 35
Registriert: 06.11.2013 19:35

Re: Liste an Procedur übergeben

Beitrag von Micky91 »

Ne, Long ist natürlich quatsch, hier soll die Liste übergeben werden.
Code angepasst.
PureBasic 5.72 (x64) | Mac OSX 10.15.6
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Liste an Procedur übergeben

Beitrag von Kiffi »

die Struktur muss mit angegeben werden:

Code: Alles auswählen

EnableExplicit

; Declare Structures
Structure sPerson
   Name.s
   Vorname.s
EndStructure

; Declare Procedures
Declare InsertIntoDatabase(List Person.sPerson())   

Procedure Read_Liste()
 
  NewList Person.sPerson()
 
  AddElement(Person())
  Person()\Name     = "Person1"
  Person()\Vorname     = "Vorname Person1"
 
  AddElement(Person())
  Person()\Name     = "Person2"
  Person()\Vorname     = "Vorname Person2"

  ForEach Person()
     Debug "Name: " + Person()\Name
     Debug "Vorname: " + Person()\Vorname

     ; Insert to Database
     InsertIntoDatabase(Person.sPerson())
   Next
  
 EndProcedure
 
Procedure InsertIntoDatabase(List Person.sPerson())
 
  If OpenDatabase(0, DatabaseFile$, "", "")
    Debug "Datenbankfile geöffnet"
    Debug Person()\Name
    ;......
  EndIf
EndProcedure

;Main
Read_Liste()
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Liste an Procedur übergeben

Beitrag von Danilo »

Mit Struktur, 1 Eintrag pro Aufruf von InsertIntoDatabase():

Code: Alles auswählen

EnableExplicit

; Declare Structures
Structure sPerson
   Name.s
   Vorname.s
EndStructure

; Declare Procedures
Declare InsertIntoDatabase(*Person.sPerson)

Procedure Read_Liste()
 
  NewList Person.sPerson()
 
  AddElement(Person())
  Person()\Name     = "Person1"
  Person()\Vorname     = "Vorname Person1"
 
  AddElement(Person())
  Person()\Name     = "Person2"
  Person()\Vorname     = "Vorname Person2"

  ForEach Person()
     Debug "Name: " + Person()\Name
     Debug "Vorname: " + Person()\Vorname

     ; Insert to Database
     InsertIntoDatabase(@Person()) ; 1 Struktur übergeben
   Next
  
 EndProcedure
 
Procedure InsertIntoDatabase(*Person.sPerson)
  Protected DatabaseFile$=""
  ;If OpenDatabase(0, DatabaseFile$, "", "")
    Debug "Datenbankfile geöffnet"
    Debug *Person\Name
    ;......

  ;EndIf
EndProcedure

;Main
Read_Liste()
Ganze Liste an InsertIntoDatabase():

Code: Alles auswählen

EnableExplicit

; Declare Structures
Structure sPerson
   Name.s
   Vorname.s
EndStructure

; Declare Procedures
Declare InsertIntoDatabase(List Person.sPerson())

Procedure Read_Liste()
 
  NewList Person.sPerson()
 
  AddElement(Person())
  Person()\Name     = "Person1"
  Person()\Vorname     = "Vorname Person1"
 
  AddElement(Person())
  Person()\Name     = "Person2"
  Person()\Vorname     = "Vorname Person2"

  InsertIntoDatabase(Person()) ; Ganze Liste übergeben
  
 EndProcedure
 
Procedure InsertIntoDatabase(List Person.sPerson())
  Protected DatabaseFile$=""
  ;If OpenDatabase(0, DatabaseFile$, "", "")
  ForEach Person()
    Debug "Datenbankfile geöffnet"
    Debug Person()\Name
  Next
    ;......

  ;EndIf
EndProcedure

;Main
Read_Liste()
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Micky91
Beiträge: 35
Registriert: 06.11.2013 19:35

Re: Liste an Procedur übergeben

Beitrag von Micky91 »

Jau, jetzt hab ich´s kapiert. Danke :allright:

Der * ist ja für Pointer gedacht, was besagt das @-Zeichen?
PureBasic 5.72 (x64) | Mac OSX 10.15.6
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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

Re: Liste an Procedur übergeben [Gelöst]

Beitrag von NicTheQuick »

Siehe Hilfe. Das @-Zeichen gibt die Speicheradresse (Pointer) einer Variablen oder Funktion zurück.
Antworten