Procedure als Funktion, die eine Structure zurück gibt

Anfängerfragen zum Programmieren mit PureBasic.
Lothar Schirm
Beiträge: 41
Registriert: 30.04.2012 16:38

Procedure als Funktion, die eine Structure zurück gibt

Beitrag von Lothar Schirm »

In FreeBASIC und anderen BASIC-Dialekten kann eine FUNCTION auch einen benutzerdefinerten Typ zurück geben. Beispiel:

TYPE Vektor
x AS DOUBLE
y AS DOUBLE
END TYPE

FUNCTION VektorAdd(a AS Vektor, b AS Vektor) AS Vektor
(Code zum addieren zweier Vektoren ...)
END FUNCTION

Wenn ich so etwas mit PureBasic versuche, bekomme ich eine Fehlermeldung, dass ProcedureReturn mit Structures nicht funktioniert. Beispiel:

Code: Alles auswählen


Structure Vektor
  x.d
  y.d
EndStructure

Procedure.Vektor VektorAdd(*a.Vektor, *b.Vektor)
  Protected c.Vektor
  c\x = *a\x + *b\x
  c\y = *a\y + *b\y
  ProcedureReturn c
EndProcedure

Geht das nur so, also nicht als Funktion?

Code: Alles auswählen


Procedure Vektoradd(*a.Vektor, *b.Vektor, c*Vektor)
  *c\x = *a\x + *b\x
  *c\y = *a\y + *b\y
EndProcedure

Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Procedure als Funktion, die eine Structure zurück gibt

Beitrag von ts-soft »

Code: Alles auswählen

Structure Vektor
  x.d
  y.d
EndStructure

Procedure.i VektorAdd(*a.Vektor, *b.Vektor)
  Static c.Vektor ; damit die Speicheradresse auch nach dem Verlassen der Procedure gültig bleibt!
  c\x = *a\x + *b\x
  c\y = *a\y + *b\y
  ProcedureReturn @c
EndProcedure

Define *d.Vektor
Define.Vektor a, b

a\x = 10.0
a\y = 20.1
b\x = #PI
b\y = 0.815

*d = VektorAdd(@a, @b)
Debug *d\x
Debug *d\y

Geht alles, ist aber nicht immer alles sinnvoll :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Lothar Schirm
Beiträge: 41
Registriert: 30.04.2012 16:38

Re: Procedure als Funktion, die eine Structure zurück gibt

Beitrag von Lothar Schirm »

:) Vielen Dank! Werde mich mal mit dem Pointer-Tutorial beschäftigen (siehe Antwort auf meine andere Frage von gestern bezüglich der Rückgabe mehrerer Werte durch eine Prozedur).
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Re: Procedure als Funktion, die eine Structure zurück gibt

Beitrag von Josef Sniatecki »

ts-soft hat geschrieben:Geht alles, ist aber nicht immer alles sinnvoll :wink:

Code: Alles auswählen

Structure Vektor
  x.d
  y.d
EndStructure

Procedure.i VektorAdd(*a.Vektor, *b.Vektor)
  Static c.Vektor ; damit die Speicheradresse auch nach dem Verlassen der Procedure gültig bleibt!
  c\x = *a\x + *b\x
  c\y = *a\y + *b\y
  ProcedureReturn @c
EndProcedure

Define *d.Vektor
Define a.Vektor, b.Vektor, c.Vektor

a\x = 0   : a\y = 0
b\x = 1   : b\y = 1
c\x = #PI : c\y = #PI

*d = VektorAdd(VektorAdd(@a, @b), VektorAdd(@b, @c))
Debug *d\x
Debug *d\y
In der Tat :mrgreen:

:wink:
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Antworten