Seite 1 von 1

Methoden einer Klasse in verschiedene PRG

Verfasst: Di, 27. Mär 2018 16:22
von Wolfgang Ciriack
Kann man Methoden einer Klasse in verschiedene PRGs packen ?
Bekomme beim Compiler immer "Cannot find declaration of class..."
Wenn ja, wie ?

Re: Methoden einer Klasse in verschiedene PRG

Verfasst: Di, 27. Mär 2018 18:26
von Manfred
wäre da nicht Vererbung ein Stichwort?

Re: Methoden einer Klasse in verschiedene PRG

Verfasst: Di, 27. Mär 2018 19:11
von georg
Hallo, Wolfgang -


da der Compiler dateiweise arbeitet, müssen auch die Deklarationen einer Klasse in eine Datei rein.

Der Compiler prüft, dass alle deklarierten Methoden auch vorhanden sind, und im Gegenzug, dass alle vorhandenen Methoden auch deklariert sind. Da stellt sicher, dass die Klasse zur Laufzeit (was deklarierte Methoden angeht) auch funktionsfähig ist.

Das wäre nicht sichergestellt, wenn die Klasse in verschiedenen .prg-Dateien definiert werden könnte.

Und Vererbung betrifft abgeleitete Klassen, aber nicht das Problem, das Wolfgang hat.

Wobei interessant wäre, wenn Du beschreiben könntest, warum Du diese Frage hast, Wolfgang?

Re: Methoden einer Klasse in verschiedene PRG

Verfasst: Mi, 28. Mär 2018 5:36
von AUGE_OHR
wie arbeitet der Formdesigner wenn er CLASS Code generiert ... :roll:

hier mein Demo Code

Code: Alles auswählen

Procedure Main
LOCAL oXbp
LOCAL nRow   := MaxRow() / 2
LOCAL nCol   := MaxCol() / 2
LOCAL cLabel := "Method in other PRG"
LOCAL cColor := "W+/B"
LOCAL nLen   := LEN(cLabel)

   CLS
   oXbp := Label ():New(nRow, nCol-(nLen/2), cLabel, cColor)
   oXbp:Show()
   WAIT
RETURN
nun die CLASS

Code: Alles auswählen

CLASS Label
  EXPORTED:                       
     VAR     nRow, nCol, cLabel, cColor
     METHOD  init, Show
ENDCLASS

METHOD Label:init( nRow, nCol, cLabel, cColor )
   ::nRow   := IIF( nRow == NIL, ROW(), nRow )
   ::nCol   := IIF( nCol == NIL, COL(), nCol )
   ::cLabel := IIF( cLabel==NIL, "" , cLabel )
   ::cColor := IIF( cColor==NIL, SETCOLOR(), cColor )
RETURN self
#include "CLASS2.PRG"     // diese Zeile  :!: 
und im CLASS2.PRG steht dann dass

Code: Alles auswählen

METHOD Label:Show
   @ ::nRow, ::nCol SAY ::cLabel COLOR ::cColor
RETURN self
es geht also schon aber die Frage ist wirklich warum du meinst das du es in "dem" PRG haben musst :?:
hat es evtl. mit Codeblock zu tun ... :-"

Re: Methoden einer Klasse in verschiedene PRG

Verfasst: Mi, 28. Mär 2018 7:19
von Wolfgang Ciriack
Ich wollte das einfach wegen der besseren Übersicht haben. Ich habe noch ein paar alte Druckroutinen, die sehr lang sind.
Aber es ist auch kein Problem, diese alle in ein PRG zu packen.
Das sind einfach mal so Fragen, die auftauchen, wenn man versucht, alten Funktionscode in Klassencode umzuwnadeln :)

Re: Methoden einer Klasse in verschiedene PRG

Verfasst: Mi, 28. Mär 2018 10:40
von georg
Hallo, Wolfgang -


Du kannst natürlich über #INCLUDE weitere PRG-Dateien "einbinden".

Also, Du definierst die Klasse und packst dann hinter die Definition ein #INCLUDE MyClassPart2.prg usw.

Das sollte funktionieren.

Re: Methoden einer Klasse in verschiedene PRG

Verfasst: Mi, 28. Mär 2018 16:00
von Wolfgang Ciriack
Ja, das werde ich, wenn ich das umgesetzt habe, mal probieren und sehen, wo dann die Fallstricke sind.
Gab es mit dem include von prgs nicht Probleme beim Debuggen, Fehlermeldungen, falche Zeilennummern o.ä. ?

Re: Methoden einer Klasse in verschiedene PRG

Verfasst: Mi, 28. Mär 2018 16:02
von Manfred
es gibt dazu einen Thread. Ich hatte da mal was mit ausprobiert, was aber nicht so klappte wie ich es dachte bzw. wollte. Ich weiß aber nicht ob Dir das jetzt weiterhilft.