Zugriffsrechte auf Variablen in einer anderen Klasse



  • Hallo,

    ich habe ein Problem, und zwar habe ich eine Klasse1 und eine Klasse2. In Klasse1 sind einige Parameter definiert, zB x,y,z. Nun existieren in Klasse2 ebenfalls Parameter mit derselben Bezeichnung x,y,z. In der Header-Datei von Klasse2 sind x,y,z nicht deklariert, sondern sind nur Parameter einer Funktion AddPoint(float x, float y, float z).

    hat jemand eine Idee wie ich von Klasse1 auf DIE x,y,z aus Klasse2 zugreifen kann? Die Methode ist public.



  • Versteh ich nicht. Schbei mal ein Beispielprogramm bitte.



  • Ich hab' deinen Text mal wie folgt interpretiert:

    Klasse1.h

    class Klasse1
    {
    	public:
    
    		float x, y, z;
    
    		void DoSomething ();
    };
    

    Klasse2.h

    class Klasse2
    {
    	public:
    
    		float x, y, z;
    
    		void AddPoint (float x, float y, float z);
    };
    

    Klasse1.cpp

    #include "Klasse1.h"
    #include "Klasse2.h"
    
    void Klasse1::DoSomething ()
    {
    	Klasse2 k2;
    
    	k2.x = 100; // <-- Punktoperator
    	k2.y = 200;	
    	k2.z = k2.x + k2.y;
    
    	k2.AddPoint(1, 2, 3);
    
    	return;
    }
    

    Klasse2.cpp

    #include "Klasse2.h"
    
    void Klasse2::AddPoint (float x, float y, float z)
    {
    	return;
    }
    

    prog.cpp

    #include "Klasse1.h"
    #include "Klasse2.h"
    
    int main ()
    {
    	return 0;
    }
    

    Die Variablen die in den Funktionen und Methoden beim Aufruf Argumente entgegennehmen nennt man Parameter, die Variablen die objektspezifische Informationen speichern unter anderem Membervariablen oder Felder.

    Auf öffentliche Felder eines Objektes kann man mit dem Punktoperator zugreifen, auf Parameter kann man nicht von außerhalb der Funktion/Methode zugreifen. Ich denke mit DEN x, y und z meintest du die Felder von Klasse2 (Zugriff: siehe Kommentar im Code).

    Edit: Ich sehe gerade, dass x, y und z nicht in Klasse2.h definiert sein sollen. Das irritiert mich jetzt. Falls du doch den Zugriff auf die Methodenparameter meintest: Das geht nicht.

    MfG Tobi.



  • okay beispiel:

    class1.cpp

    methode( class2.x class2.y class2.z){

    do stuff..

    }

    außerdem steht in class1 in mehreren methode (welche alle ihre eigenen x,y,z haben):

    x= ..
    y= ..
    z= ..

    ------------

    class2.cpp

    methode2(x,y,z){

    do stuff...

    }

    class2.h

    int methode 2( float x, float y, float z)

    ----------------------

    ich will jetzt in class1 genau DIE x,y,z aus class2 verwenden..



  • Kannst du es nochmal versuchen, dass ichs in meine IDE kopieren kann und übersetzen kann? ... also ein komplett Beispiel.



  • Es würde uns das Helfen wirklich einfacher machen wenn du statt Pseudocode C++-Code schreibst, diesen mit dem wunderbaren C++-Tag des Forums optisch aufbesserst und etwas Whitespace sowie Kommentare einbaust und schließlich noch ein wenig auf Rechtschreibung achtest.

    Dann empfehle ich dir das Programm Stück für Stück aufzubauen und die auftretenden Fehler auszumerzen. Fang mit der main-Funktion an, schreibe Code für Klasse2, lagere ihn dann in eine extra Datei aus usw. Es empfiehlt sich nach jedem Schritt zu kompilieren.

    Wenn ich den Code betrachte werden dabei wohl viele Fragen aufkommen. Die meisten werden grundlegend sein und in jedem Tutorial/Skript/Buch beantwortet. Wenn nicht hilft Google, dann ein Forum wie dieses wenn man die Regeln beachtet (http://www.c-plusplus.net/forum/200753).

    MfG Tobi.



  • Dein Problem ist, dass class2.x in deinem Klassenentwurf nicht existiert. Das Einzige, was du machen kannst, ohne class2 zu ändern, ist methode aufrufen, aber damit würdest du nicht auf irgendwelche Variablen zugreifen, sondern nur ein paar Parameter an die Funktion übergeben. Ehrlich gesagt, fällt es mir auch schwer zu verstehen, was du genau willst, falls aber du wissen willst, wie du die Methode aufrufst:

    void class1::irgendeineMethodeAusClass1 ()
    {
        class2 obj2;
        obj2.methode(1, 2, 3);
    }
    

    class2 muss aber in class1 bekannt sein. Ich glaube, das Beste, was du machen kannst, wäre ein C++-Buch lesen, und zwar beginnend nicht in der Mitte.


Log in to reply