Hinweise zum neuen Forum
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Grundlagen [memvar, public, parameters]

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 107
Registriert: Do, 06. Jul 2006 13:24

Grundlagen [memvar, public, parameters]

Beitrag von Wonderer » Mo, 07. Mär 2016 10:03

Hallo,

ich habe hier ein Programm an dem ich Änderungen vornehmen soll. Leider bekomme ich schon den mir vorliegenden Quellcode nicht kompiliert. Ich habe das Ganze jetzt immer weiter vereinfacht um nach dem Ausschlussverfahren herauszufinden wo das Problem liegt.
Scheinbar liegt es an der Deklaration mit der Anweisung 'parameters'.

folgenden Code habe ich jetzt:

Code: Alles auswählen

memvar meineVariable

parameters param1, param2

procedure Main

  public meineVariable := "something"
	
  prozedurAufruf()

return

procedure prozedurAufruf()

  CLEAR SCREEN
  SET COLOR TO N/W,W/N
  @ 1,1 SAY meineVariable

return
und da erhalte ich diese Fehlermeldung:
C:\Clipper>xpp /b vartest2
Xbase++ (R) Compiler 1.90.331 Apr 26 2006
Copyright (c) Alaska Software. All rights reserved.
File: vartest2.prg Line: 18
vartest2.prg(4:0): warning XBT0106: Procedure MAIN does not end with RETURN
vartest2.prg(5:0): error XBT0247: Redefinition of function or procedure
1 error(s) found in file vartest2.prg!
Was ich auch noch nicht so richtig verstanden habe ist das mit MEMVAR / PUBLIC.

Ich bekomme die gleiche Fehlermeldung bei diesem Code:

Code: Alles auswählen

public meineVariable

procedure Main

  meineVariable := "something"
	
  prozedurAufruf()

return

procedure prozedurAufruf()

  CLEAR SCREEN
  SET COLOR TO N/W,W/N
  @ 1,1 SAY meineVariable

return
Wenn ich aber wie schon im ersten geteilten Code statt PUBLIC mit MEMVAR deklariere dann bekomme ich keine Fehlermeldung.
Ohne die Anweisung PARAMETERS erfolgt das Kompilieren auch ohne Probleme.

Ok, während des Schreibens noch etwas ausprobiert - wenn ich die Anweisung PARAMETERS verschiebe innerhalb die procedure MAIN dann erhalte ich den Fehler nicht mehr.

Code: Alles auswählen

// CODE erfolgreich kompiliert und ohne Fehler ausfuehrbar
memvar meineVariable

procedure Main

  parameters param1, param2
  public meineVariable := "something"
	
  prozedurAufruf()

return

procedure prozedurAufruf()

  CLEAR SCREEN
  SET COLOR TO N/W,W/N
  @ 1,1 SAY meineVariable

return
Zusammegefasst mein Problem - im ursprünglichen Quellcode wird ganz am Anfang PUBLIC verwendet. Das lässt sich nicht kompilieren.
Wenn ich auf MEMVAR umstelle dann funktioniert es - was ist falsch an der Deklaration von PUBLIC?!? :?:

georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1867
Registriert: Fr, 08. Feb 2008 22:29

Re: Grundlagen [memvar, public, parameters]

Beitrag von georg » Mo, 07. Mär 2016 10:12

Hallo,


die Antwort ist recht einfach:

PUBLIC und PRIVATE sind ausführbare Anweisungen und dürfen daher nur innerhalb von Funktionen (oder Prozeduren) NACH der Deklaration von LOCAL bzw. STATIC auftauchen.

Einiges dazu habe ich in der WiKi zusammengefasst: http://wiki.xbaseentwickler.de/index.ph ... en-Klassen
Liebe Grüsse aus der Eifel,

Georg

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16711
Registriert: Di, 29. Nov 2005 17:58
Wohnort: Kreis Wesel
Kontaktdaten:

Re: Grundlagen [memvar, public, parameters]

Beitrag von Manfred » Mo, 07. Mär 2016 10:33

im schlimmsten Fall die Schalter vom Compiler entsprechend stellen und dann nachbearbeiten.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1867
Registriert: Fr, 08. Feb 2008 22:29

Re: Grundlagen [memvar, public, parameters]

Beitrag von georg » Mo, 07. Mär 2016 10:41

Hallo, Manfred -


da nützen die Schalter vom Compiler nichts, wenn PUBLIC ausserhalb einer Funktion bzw. Prozedur angegeben wird. Der einzig gangbare Weg ist MEMVAR, da dies (ähnlich wie STATIC) auch ausserhalb einer Funktion bzw. Prozedur verwendet werden kann.
Liebe Grüsse aus der Eifel,

Georg

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16711
Registriert: Di, 29. Nov 2005 17:58
Wohnort: Kreis Wesel
Kontaktdaten:

Re: Grundlagen [memvar, public, parameters]

Beitrag von Manfred » Mo, 07. Mär 2016 10:42

nee Georg. Das war anders gemeint. Die Schalter an und dann meckert der Compiler wenn er was nicht vernünftig deklariert bekommen hat und dann sollte man handeln.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13601
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim
Kontaktdaten:

Re: Grundlagen [memvar, public, parameters]

Beitrag von brandelh » Mo, 07. Mär 2016 10:51

Es gibt einen Schalter der die automatischen Generierung von einer Prozedur am Anfang einer Datei verhindert:

/n Keine implizite Startprozedur (MAIN)

Unter Clipper wurde ohne /N eine Funktion / Prozedur mit dem Namen der PRG erzeugt.

Das ist natürlich nicht empfehlenswert, ich setze daher immer /N ... schon seit Clipper.

Aber laut Doku wäre zu vermuten, dass der Anfang der Datei zu einer automatischen Procedure MAIN wird und das trifft dann auf die Zeile procedure MAIN, also eine doppelte Deklaration !
Gruß
Hubert

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1791
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: Grundlagen [memvar, public, parameters]

Beitrag von Herbert » Mo, 07. Mär 2016 10:54

Schau dir zu den Publics einmal dieses Thema dazu an:
http://xbaseforum.de/viewtopic.php?f=31 ... lit=public
Grüsse Herbert
Immer in Bewegung...

Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 107
Registriert: Do, 06. Jul 2006 13:24

Re: Grundlagen [memvar, public, parameters]

Beitrag von Wonderer » Mo, 07. Mär 2016 10:57

danke für eure Antworten und Hinweise - das bringt mich jetzt weiter.. :roll:

UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2421
Registriert: Fr, 10. Feb 2006 10:51
Wohnort: Aachen
Kontaktdaten:

Re: Grundlagen [memvar, public, parameters]

Beitrag von UliTs » Mo, 07. Mär 2016 18:06

Vielleicht ist einfach nur die Reihenfolge vertauscht.
Mach mal daraus

Code: Alles auswählen

procedure Main
parameters param1, param2
memvar meineVariable
...
Klappt es dann zu Deiner Zufriedenheit?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück

Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 107
Registriert: Do, 06. Jul 2006 13:24

Re: Grundlagen [memvar, public, parameters]

Beitrag von Wonderer » Di, 08. Mär 2016 10:30

ja, danke. das mit der Position von PARAMETERS funktioniert so. die Fehlermeldung war irgendwie irreführend :roll:

georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1867
Registriert: Fr, 08. Feb 2008 22:29

Re: Grundlagen [memvar, public, parameters]

Beitrag von georg » Di, 08. Mär 2016 10:50

Tja, die Fehlermeldung ist irreführend wenn man nicht weiss, dass PARAMETERS, PRIVATE und PUBLIC ausführbare Anweisungen sind. Das ist eben der Preis für die Kompatibilität zu Clipper.
Liebe Grüsse aus der Eifel,

Georg

UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2421
Registriert: Fr, 10. Feb 2006 10:51
Wohnort: Aachen
Kontaktdaten:

Re: Grundlagen [memvar, public, parameters]

Beitrag von UliTs » Di, 08. Mär 2016 11:32

Dadurch dass davor keine procedure oder function Anweisung war interpretiert dies Xbase++ so, dass es sich um die procedure Main handelt.
Anschließend wird dann aber doch die procedure Main definiert und Xbase++ glaubt, dass es doppelt vorkommt ...
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast