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 »

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: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Grundlagen [memvar, public, parameters]

Beitrag von georg »

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 S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21150
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Grundlagen [memvar, public, parameters]

Beitrag von Manfred »

im schlimmsten Fall die Schalter vom Compiler entsprechend stellen und dann nachbearbeiten.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Grundlagen [memvar, public, parameters]

Beitrag von georg »

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 S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21150
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Grundlagen [memvar, public, parameters]

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Grundlagen [memvar, public, parameters]

Beitrag von brandelh »

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: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Grundlagen [memvar, public, parameters]

Beitrag von Herbert »

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 »

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: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Grundlagen [memvar, public, parameters]

Beitrag von UliTs »

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 »

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: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Grundlagen [memvar, public, parameters]

Beitrag von georg »

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 S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Grundlagen [memvar, public, parameters]

Beitrag von UliTs »

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