Zugriff auf Objekte in anderen Klassen.



  • Hallo Zusammen.
    Ich habe offensichtlich einen Fehler mit einer Referenz als Rückgabe und kann den Fehler nicht finden. Ich habe Folgenden Code in meiner Alpha.cpp Hauptdatei:

    #include <iostream>
    #include "Betha.h"
    
    using namespace std;
    
    void Umrechnen(int&);
    
    int main() {
      Betha B;        
      Betha *x_Position; 
      int x = 10;
      x_Position = &B;
    
      B.Setze1(x);
      Umrechnen(x);
    
      cout << B.Nehme1() << "\n";
      cout << B.Nehme2() << "\n";
    
      return 0;
    }
    

    Ich möchte einfach nur die x=10 in Zeile 14 setzten und in Zeile 17 wieder abrufen.

    Dazu habe ich folgende Headerdatei Betha.h

    #include <iostream>                 
    using namespace std;
    
    class Betha {
    
    public:
        int X1;  
        int X2; 
    
        void Umrechnen();
        void Setze1(int x1);
        void Setze2(int x2); 
        int Nehme1() {return X1;}
        int Nehme2() {return X2;}
    
    };
    
    void Betha::Setze1(int x1) {
        X1 = x1;
    };
    
    void Betha::Setze2(int x2) {
        X2 = x2;
    };
    

    Und folgende Betha.cpp Datei:

    #include <iostream>
    #include "Betha.h"
    using namespace std;
    
    void Betha::Umrechnen(int& x){
    
        int a = Betha.Nehme1() + 1;
        Betha.Setze2(a);
        cout <<"In Funktion 'Umrechnen'" << a <<  "\n";
    }
    

    Und zusätzlich möchte ich in Zeile 18 (Alpha.cpp) einfach nur das x+1 (11) abrufen.
    Wenn ich diese void Betha::Umrechen - Funktion mit in Alpha.cpp lege,
    bekomme ich als Ausgabe für x zwar 10, aber für x+1 bekomme ich 32746.
    Wenn ich diese Funktion in Betha.cpp lasse, bekomme ich als Ausgabefehler "Alpha.cpp:(.text+0xca): undefined reference to `Umrechnen(int&)'
    collect2: error: ld returned 1 exit status"

    Meine Frage: liegt das Problem in meiner Betha::Umrechen - Funktion daran, dass ich einmal int& x als Referenz benutze und dann Nehme1() aufrufe? Denn a ist in Zeile 9 in Betha.cpp gleich 1, also Betha.Nehme1() = 0.

    Über einen Tipp würde ich mich freuen.



  • Es gibt verschiedene Probleme mit deinem Code. Das erste Problem ist, dass der obige Code nicht übersetzt werden kann. Ich schlage vor, dass Du den Code korrigierst und hier zeigst (Copy & Paste, nicht abschreiben). Falls Dir das Mühe bereitet, einfach melden und konkrete Fehlermeldungen zeigen (auch hier: Copy & Paste, nicht abschreiben).

    BTW: Dein Code ist C++ und nicht C++/CLI - Dein Beitrag ist also in der falschen Kategorie.



  • Warum hast du in deine alpha.cpp eine Vorwärtsdeklaration von Umrechnen()?
    Und, willst du nicht die Klassenfunktion Betha::Umrechnen() aufrufen? Also, so wie du das auch mit Setze1() und Nehme1() gemacht hast?

    Deine Betha::Umrechnen() ist auch fehlerhaft. Du benötigst an der Stelle das "Betha." nicht vor den Funktionsaufrufen.



  • Der Fehler ist das dir einfachste Grundlagen fehlen oder du sie nicht verstanden hast. Wofür setzt du überhaupt Referenzen oder Pointer ein, weil du das aus irgendeinen Beispiel kopiert hast? Nur um einen Member zu setzen oder abzurufen ist das erstmal noch gar notwendig.

    Und Beta schreibt man normalerweise nicht mit h.