Struktur von Procedure zurückgeben?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich würde das sogar als Bug bezeichnen.

wenn eine Variable, die Shared sein soll, im Hauptscope vorhanden sein muss,
sollte auch verlangt werden, dass sie im Hauptscope deklariert wird, mit oder ohne explicit.

tatsächlich ist sie ja auch bei der "on the fly" deklaration im Hauptscope vorhanden.

Code: Alles auswählen

Procedure test1()
Shared a
  a=10
EndProcedure

Debug a
test1()
Debug a
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Hallo,

ich habe zu diesem Thema noch eine Frage:

Wie übergebe ich eine Linked List an eine Procedure? Ich habe es soeben mit der gleichen Methode versucht, allerdings darf man ja keine Klammern im Funktionsnamen haben...

Mein Code:

Code: Alles auswählen

Structure namen
  vorname.s
  name.s
EndStructure

NewList namen.namen()

Procedure verarbeite(*namen.namen())
  [...]
EndProcedure

AddElement(namen())
namen()\vorname = "Max"
namen()\name = "Mustermann"

verarbeite(@namen())
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Captn. Jinguji
Beiträge: 397
Registriert: 07.06.2005 19:47
Computerausstattung: PB 4.73x64, i7, WIN 10x64, ATI NVidia RTX 2070
Wohnort: Witten

Beitrag von Captn. Jinguji »

Code: Alles auswählen

Structure namen 
  vorname.s 
  name.s 
EndStructure 

NewList namen.namen() 

Procedure verarbeite(List MyList.namen()) 
  Debug MyList()\Vorname
EndProcedure 

AddElement( Namen() ) 
namen()\vorname = "Max" 
namen()\name = "Mustermann" 

verarbeite( Namen() )
Ist das Kunst hier, oder kann das weg ?
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Vielen Dank für die schnelle Antwort. Funktioniert!
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Little John

Beitrag von Little John »

PureBasic4.0 hat geschrieben:Vielen Dank für die schnelle Antwort. Funktioniert!
Ein Glück dass es funktioniert, ansonsten wäre ein dicker Fehler in der PB-Hilfe! ;-)

Gruß, Little John
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Nochmals zum urspruenglichen Problem. Eigentlich sollte auch das hier funktionieren (kann es grad nicht testen):

Code: Alles auswählen

Structure Namen 
  name.s 
  vorname.s 
EndStructure 

Procedure.l verarbeite(vorname$,name$) 
  Define *Namensliste.Namen = AllocateMemory(SizeOf(Namen))
  
  *Namensliste\name = name$ 
  *Namensliste\vorname = vorname$ 
  
  ProcedureReturn *Namensliste 
EndProcedure 

*list.Namen = verarbeite("Max","Mustermann")
debug *list\name
debug *list\vorname
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

Kaeru Gaman hat geschrieben:die deklaration einer Variablen mit Shared innerhalb einer Procedure ist nur dann möglich, wenn sie bereits zuvor im Hauptcode deklariert wurde!
Das ist nicht korrekt: mein Beispiel funktioniert in PB 4.20 und 4.30 einwandfrei ohne Fehlermeldung!
Natürlich sollte man wie von ts-soft empfohlen immer Enable Explicit verwenden. Dann _muß_ eine
in einer Prozedur verwendete Variable vor der Prozedur deklariert werden. Ich hatte lediglich versucht,
das Ursprungs-Beispiel von PureBasic 4.0 mit möglichst wenig Änderungen anzupassen...
Antworten