Seite 2 von 2

Verfasst: 22.05.2009 14:23
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

Verfasst: 05.06.2009 12:28
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())

Verfasst: 05.06.2009 12:35
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() )

Verfasst: 05.06.2009 12:36
von PureBasic4.0
Vielen Dank für die schnelle Antwort. Funktioniert!

Verfasst: 05.06.2009 15:13
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

Verfasst: 05.06.2009 15:54
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

Verfasst: 08.06.2009 11:59
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...