Zugriff auf private Member.Wie mach ich das am besten?
-
Hallo wiedermal,
zuerst mal allen ein gesundes neues Jahr und alles gute !
Nun zu meiner Frage. Ich hab so was in der Art hier schonmal gefragt. Seitdem ist ein bischen Zeit ins Land gegangen, ich hab ein bischen gelernt, gearbeitet und mir endlich auch ein Buch gekauft. Ist gerade diesen Monat rausgekommen. Nennt sich "Einstieg in Visual C++ 2005" von Andrè Willms, erschienen bei Galileo Computigng und ist sehr gut. ( Bin nur noch nicht sehr weit gekommen)
So, bevor ich da nun weiterlese muss ich wiedermal etwas verstehen sonst kann ich nicht schlafen
Also Eine Form, 3 Buttons und 3 TextBoxen, so zum testen.
Das hier geht alles :// *.h #pragma endregion void Button2press(String ^ newText) { Form1::textBox2->Text = newText; }; private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { textBox1->Text = "Button 1 geht"; } private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { Button2press("Button 2 geht auch"); } private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e); }; }
Es scheitert an dem 3.Button :
// *.cpp #include "stdafx.h" #include "Form1.h" using namespace ClassTest; void DasGehtNicht(Form1 ^ f) { // Hier ist auch das Problem f->textBox3->Text = "Hallo, jetzt gehts so auch ??"; }; // Hab das hier nur ausgelagert wies sein soll. System::Void Form1::button3_Click(System::Object^ sender, System::EventArgs^ e) { Form1::Button2press("Button 3 geht auch ??"); Form1::textBox3->Text = "So gehts auch..."; // Hier ist das Problem DasGehtNicht(this); }; . . .
Das hier :
// *.cpp void DasGehtNicht(Form1 ^ f) { //f->textBox3->Text = "Hallo, jetzt gehts so auch ??"; f->Button2press("Neuer TExt"); };
hab ich auch probiert, das geht auch nicht. Da bekomm ich nen Fehler der sich "
.\ClassTest.cpp(11) : error C3767: "ClassTest::Form1::Button2press": Auf mögliche Funktion(en) kann nicht zugegriffen werden."Hmm....
Also ich bekomme hier eine Fehlermeldung "Kein Zugriff auf private Member"..Das verstehe ich ja auch und weiß mittlerweile auch warum das so sein soll.
Allerdings weiß ich nicht wie ich das am besten machen soll oder wie man das macht.
Also ich meine wie wird es denn gemacht ?Ich weiß, es gibt immer viele Wege, aber ich möchte eigentlich mal den RICHTIGEN ( wies sein soll ) wissen.
Könnt ihr mir das mal verraten ?
Danke
Matthias
-
Mach die Methode einfach "public"...
Ich persönlich würde nur darauf achten, dass Du keine Fields (also Member-Variablen) public machst. Das ist IMHO sehr unschön.
-
Hallo,
ich nehme mal an Du meinst die Methode "Button2press" oder ?
Sorry aber ich kann immer nicht wirklich was mit deinen ( sehr ) knapp gefassten Antworten anfangen.
Könntest Du Dich bitte mal etwas genauer ausdrücken und mir vielleicht wenigstens nen Hinweis geben was Du meinst damit acuh mal ein Anfänger wie ich deine Antwort versteht. Danke Dir !Ich hab gerade auch noch mal die anderen Antworten durchgestöbert und bin auf die Property gekommen . War damals ein Rat von Euch sowas über Property's zu machen.
Also hab bich das mal so getestet :public: property String^ pTextBoxText { String^ get() { return Form1::textBox3->Text; }; void set(String ^ newText) { Form1::textBox3->Text = newText; }; };
So, die Property "pTextBoxText" ist ja jetzt von "aussen" zugänglich.
Also hab ich in der *.cpp folgendes geschrieben :void SetProperty(Form1 ^ f) { f->pTextBoxText = "So gehts auch asl Property"; }; System::Void Form1::button3_Click(System::Object^ sender, System::EventArgs^ e) { SetProperty(this); };
Hmm, ist das so richtig ? Gehen tut es ja aber ist es auch RICHTIG so ?
Ich stoß mich ein bischen daran das ich der Methode SetProperty einen this Zeiger übergeben muß, denn anders hab ich es noch nicht hinbekommen.Dieser Versuch :
void SetProperty() { Form1::pTextBoxText = "So gehts auch asl Property"; }; System::Void Form1::button3_Click(System::Object^ sender, System::EventArgs^ e) { SetProperty(); };
führte zu folgenden Fehler :
.\ClassTest.cpp(21) : error C2597: Ungültiger Verweis auf nicht-statischen Member 'ClassTest::Form1::pTextBoxText'
Woraufhin ich versucht habe die Property Statisch zu machen was wiederum dazu führte das ich nicht mehr auf die Textbox->Text Eigenschaft zugreifen konnte :
public: static property String^ pTextBoxText { String^ get() { return Form1::textBox3->Text; }; void set(String ^ newText) { Form1::textBox3->Text = newText; }; };
dann geht
return Form1::textBox3->Text;
nicht mehr.
Ich würde mich dann also im Kreise rehen.Wie mach ich das nun am besten ?
Matthias
Danke für Deine Hilfe !
-
Ist Dir aufgefallen das Du schon wieder exakt an den gleichen Problemen scheiterst wie in den ersten Posts ?
Ich weiß, es gibt immer viele Wege, aber ich möchte eigentlich mal den RICHTIGEN ( wies sein soll ) wissen.
Besorg Dir ein gutes Grundlagenbuch und entwickel erst einmal Konsolenanwendungen in den Du mal ein paar Grundlagen verinnerlichst.
Was auch immer Du für einen Weg gehst , Du machst es Dir unnötig schwer. Ich kann nachvollziehen wenn man nicht immer alles Grundlegende lesen kann und um Hilfe fragt, aber in den vergangenen 3 Monaten hat sich Dein KnowHow nicht erweitert, die Fragen/Probleme sind die gleichen geblieben.
Lies die alten Beiträge, die von Dir eröffnet wurden. Dort sind alle Fragen, die Du hier stellst, bereits mehrfach beantwortet.
-
Hallo,
auch Dir eine gesundes neues Jahr und danke für deine Antwort.
Falls Du meinen ersten Beitrag auch gelesen haben solltest wäre Dir vielleicht aufgefallen das ich das bereits getan hab.
Ich habe nur versucht auf dieses spezifische Problem eine Antwort zu bekommen aber da bin ich hier glaube ich falsch.
Naja bis denne byeMatthias
-
STF-DIR schrieb:
Hallo,
Falls Du meinen ersten Beitrag auch gelesen haben solltest wäre Dir vielleicht aufgefallen das ich das bereits getan hab.
Dann verstehe ich nicht, warum Du nach viel Erklären und Bücher kaufen noch immer nicht verstanden hast, was Instanzen sind.
Form1::Button2press("Button 3 geht auch ??"); Form1::textBox3->Text = "So gehts auch...";
\ClassTest.cpp(21) : error C2597: Ungültiger Verweis auf nicht-statischen Member 'ClassTest::Form1::pTextBoxText'
Woraufhin ich versucht habe die Property Statisch zu machen was wiederum dazu führte das ich nicht mehr auf die Textbox->Text Eigenschaft
Sorry aber ich kann immer nicht wirklich was mit deinen ( sehr ) knapp gefassten Antworten anfangen.
Die Antwort von Jochen ist übrigens exakt und ausführlich auf Deine Frage zugeschnitten.
-
STF-DIR schrieb:
Hmm, ist das so richtig ? Gehen tut es ja aber ist es auch RICHTIG so ?
Genau so ist es 100% RICHTIG!
Aber um damit arbeiten zu können brauchst Du halt eine INSTANZ Deiner Form, sonst kann der Compiler ja nicht wissen WELCHE Instanz er verwenden soll (falls Du auf die Idee kommen solltest, mal mehr als eine Instanz Deiner Form zu erstellen).
-
Hi JOCHEN,
ok, also hab ich das doch richtig verstanden. Danke Dir ganz doll für Deine Antwort.
Damit kann ich jetzt weiter an den "Grundlagen" lernen.Danke nochmal Jochen
Matthias