Seite 1 von 1

Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 19:55
von Jan
Hallo,

kann mir jemand sagen, was diese Meldung mir sagen möchte? "Access to member-variable not allowed in this context". Das Irritierende daran ist, daß ich die Variable einfach nur an eine Funktion übergebe, so wie ich das an anderen Stellen auch mache. Ich habe die auch nicht anders deklariert als die anderen Variablen.

Jan

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 20:54
von Manfred
Hi Jan,

ist die Var Exported, oder Protected, oder Hidden? Den Fehler kenne ich, aber mir fällt nicht mehr ein, was ich damals verbockt hatte. Oder ist die Var aus einer anderen Klasse, bzw. Vererbung?
Im Zweifelsfall an der Stelle über den Debugger gucken, wie es aussieht.

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 20:56
von Martin Altmann
Z.B. das dass Objekt noch nicht erzeugt ist?

Viele Grüße,
Martin

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 20:59
von Manfred
Für Methoden gibt es sowas.
25 XPP_ERR_METHOD_ACCESS Zugriff auf Methode ist in diesem
Kontext nicht erlaubt (z.B. wenn eine
Methode nicht als EXPORTED: deklariert ist,

kann sie nicht in Funktionen sondern nur
in Methoden aufgerufen werden).
das ist natürlich besonders clever
28 XPP_ERR_MEMBERVAR_ACCESS Zugriff auf Member-Variable ist
in diesem Kontext nicht erlaubt.

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 21:02
von Jan
Hallo Manfred und Martin,

die ist als PROTECTED deklariert. Wenn ich die als EXPORTED einbaue, dann funktioniert es. Das habe ich inzwischen schon rausbekommen.

Hubert hat aber mal hier geschrieben, aus Kapselungsgründen wäre ein PROTRECTED ACCESS besser. Aber wie baue ich das ein? Ich hab die Hilfe durchwühlt und rumprobiert, weil ich da nix gefunden habe. Ich komme nicht dahinter, wie ich das umsetzen soll/kann.

Jan

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 21:04
von Manfred
Jan,

ich stelle fest: Wir sind immer noch Leidensgenossen. Ich kapiere das auch noch nicht wirklich. Ich bastel schon den ganzen Tag hier rum und verstehe manchmal nicht warum es klappt, bzw. warum es nicht klappt. :?

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 21:07
von Jan
Manfred,

seit wann sind Du und ich Leidensgenossen? Du spielst doch die Klaviatur der Klassen im Schlaf rauf und runter. Und ich bin froh, wenn ich die Vokabeln gerade mal richtig schreiben kann.

Jan

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 21:07
von Martin Altmann
Jan,
zeige mal Deine Klassendeklaration und wo und wie Du die betreffende Methode aufrufst.

Viele Grüße,
Martin

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 21:08
von Manfred
Jan,

Du denkst wohl auch: Kurz vor Weihnachten, da wollen wir mal Lustig sein! Nicht wahr? Klaviatur, rauf und runter. Danke dass Du mir so viel schon zutraust. =D>

Ich lese gerade: Protected Access. Ist dass nicht auch wieder geschützt und kann so nicht klappen, wie Du es gerne hättest?

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 21:10
von Jan
Martin,

das ist ein Mißverständnis. Es geht um eine PROTECTED VAR. Die bei der Übergabe an eine STATIC FUNCTION die oben genannte Fehlermeldung erzeigt.

Jan

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 21:12
von Jan
Manfred,

1) Ich bin immer lustig :^o

2) Naja, ich denke mal wenn ich eine PROTECTED VAR mit ACCESS einbaue, dann ist die zwar nur in der Klasse sichtbar, kann aber extern übergeben werden.

Sag ich mal so blauäugig als Klassen-Dummy. Aber irgendwas hat Hubert sich ja wohl bei seiner Aussage gedacht.

Jan

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 21:14
von Martin Altmann
Jan,
das kann nicht gehen!
Eine PROTECTED VAR kann nur innerhalb der Klasse angesprochen werden, in der sie auch deinfiert ist! Nicht in einer Instanz der Klasse und nicht von aussen!

Viele Grüße,
Martin

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 21:14
von Manfred
Nee,

wenn ich das richtig interpretiere, ist der generelle Zugriff (auch lesend) außerhalb untersagt. Das ist ja der Sinn und Zweck einer Kapselung. Der Raum ist dicht und keiner kommt rein, oder kann rein gucken. Nur die die drin sind, die sehen was los ist und können spielen.

Maddin war mal wieder schneller....

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 21:16
von Jan
Hey Leute,

ich will die VAR nicht von außen ansprechen! Ich will die an eine FUNCTION übergeben! Die zwar im gleichen pgr File liegt, aber eben nicht innerhalb der Klasse.

Jan

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 21:19
von Manfred
Jan,

KAPSELUNG, Raum ist abgeschlossen, Keine Fenster, keine Türen.... Nix mit weitergeben. OOP. Das ist das Dingen daran. Nicht mit Funktionen verwechseln.

(wehe das war jetzt falsch von mir erklärt)

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 21:20
von Martin Altmann
Manfred,
nö - war genau richtig!
Jan,
mach eine EXPORTED Methode in Deine Klasse, die die PROTECTED VAR zurückgibt.

Viele Grüße,
Martin

Re: Grund für Fehlermeldung

Verfasst: Sa, 29. Nov 2008 21:24
von Manfred
Oder überlege, warum die VAR Protected ist/sein muß und mache sie Exported.

Ich kriege auch gerade einen Affen hier mit Protected usw.

Re: Grund für Fehlermeldung

Verfasst: So, 30. Nov 2008 18:57
von brandelh
Hi Jan,

ehrlich gesagt verwende ich auch meist EXPORTED, statt der Kapselung.
Bei eigenen Klassen für eigene Programme ist das OK,
da man selbst ja am Besten weiß, welche Parameter OK sind.

Wenn man aber Klassen veröffentlicht und jedem Programmierer einfach Zugriff auf die "Unterwäsche" lässt,
braucht man sich nicht über peinliche Momente zu wundern :D

Für die Beurteilung was genau bei dir fehlschlägt braucht man aber auf jeden Fall die Code-Zeilen des Aufrufs,
es gibt hier nämlich viele verschiedene Ursache Möglichkeiten ;-)