Grundlagen [memvar, public, parameters]

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

Moderator: Moderatoren

Grundlagen [memvar, public, parameters]

Beitragvon Wonderer » Mo, 07. Mär 2016 9: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?!? :?:
Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 107
Registriert: Do, 06. Jul 2006 12:24

Re: Grundlagen [memvar, public, parameters]

Beitragvon georg » Mo, 07. Mär 2016 9: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.php?title=Variablen-Klassen
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1780
Registriert: Fr, 08. Feb 2008 21:29

Re: Grundlagen [memvar, public, parameters]

Beitragvon Manfred » Mo, 07. Mär 2016 9: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.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 16082
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Grundlagen [memvar, public, parameters]

Beitragvon georg » Mo, 07. Mär 2016 9: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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1780
Registriert: Fr, 08. Feb 2008 21:29

Re: Grundlagen [memvar, public, parameters]

Beitragvon Manfred » Mo, 07. Mär 2016 9: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
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 16082
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Grundlagen [memvar, public, parameters]

Beitragvon brandelh » Mo, 07. Mär 2016 9: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
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13323
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Grundlagen [memvar, public, parameters]

Beitragvon Herbert » Mo, 07. Mär 2016 9:54

Schau dir zu den Publics einmal dieses Thema dazu an:
http://xbaseforum.de/viewtopic.php?f=31&t=8304&hilit=public
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1774
Registriert: Mi, 13. Aug 2008 23:22
Wohnort: Gmunden am Traunsee, Österreich

Re: Grundlagen [memvar, public, parameters]

Beitragvon Wonderer » Mo, 07. Mär 2016 9:57

danke für eure Antworten und Hinweise - das bringt mich jetzt weiter.. :roll:
Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 107
Registriert: Do, 06. Jul 2006 12:24

Re: Grundlagen [memvar, public, parameters]

Beitragvon UliTs » Mo, 07. Mär 2016 17: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
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2370
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen

Re: Grundlagen [memvar, public, parameters]

Beitragvon Wonderer » Di, 08. Mär 2016 9:30

ja, danke. das mit der Position von PARAMETERS funktioniert so. die Fehlermeldung war irgendwie irreführend :roll:
Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 107
Registriert: Do, 06. Jul 2006 12:24

Re: Grundlagen [memvar, public, parameters]

Beitragvon georg » Di, 08. Mär 2016 9: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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1780
Registriert: Fr, 08. Feb 2008 21:29

Re: Grundlagen [memvar, public, parameters]

Beitragvon UliTs » Di, 08. Mär 2016 10: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
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2370
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen


Zurück zu Newbie

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast