<Solved> Nichts zu finden - Klassenübergriff



  • Hallo Com,

    ich bin über Goo... nicht fündig geworden und auch meine 5 Bücher gaben keinen Aufschluss; ich möchte aus der Funktion aus Klasse B (Orte) eine Funktion aus Klasse A (Spieler) aufrufen, um mit A-Werten weiter arbeiten zu können und ich hänge total:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class CSpieler
    {
    	private:
    	string m_Name;
    
    	public:
    	void Init();
    	string Call();
    };
    
    void CSpieler::Init()
    {
    	cout << "Bitte Namen eingeben: ";
    	string Name;
    	cin >> Name;
    	m_Name = Name;
    }
    
    string CSpieler::Call()
    {
    	return m_Name;
    }
    
    class COrte
    {
    	private:
    	string m_Ort;
    
    	public:
    	void Wechseln();
    };
    
    void COrte::Wechseln()
    {
    //	CSpieler Spieler1;
    	cout << "Du bist zu Hause und wachst auf, Du entscheidest Dich spazieren zu gehen." << endl;
    	cout << "Hey " << Spieler1.Call() << " was machst Du denn hier, habe Dich ewig nicht gesehen." << endl;
    
    	m_Ort = "Stadt";
    }
    
    int main()
    {
    	CSpieler Spieler1;
    	Spieler1.Init();
    
    	COrte Ort;
    	Ort.Wechseln();
    
    	return 0;
    }
    

    Fehlermeldung:

    E:\pocketcpp\pocketcpp\Projects\Payday\Payday.cpp: In member function 'void COrte::Wechseln()':
    E:\pocketcpp\pocketcpp\Projects\Payday\Payday.cpp:42:20: error: 'Spieler1' was not declared in this scope
    cout << "Hey " << Spieler1.Call() << " was machst Du denn hier, habe Dich ewig nicht gesehen." << endl;

    Wenn ich aber die Kommentierung entferne und somit einen Spieler zur Verfügung stelle, fehlt die Initialisierung

    Und warum nochmals initialisieren, wenn der Spieler doch schon verfügbar bzw. initialisiert wurde und damit aktiv

    Danke
    Toni



  • Dein Spieler1 in main, welcher dort initialisiert wird, ist ein anderes Objekt, als der Spieler1 in 'void COrte::Wechseln()'. Das ist ein neues Objekt bzw. ein anderer nicht initialisierter Spieler. Du solltest den Spieler1 aus der main() dem Ort irgendwie übergeben.



  • CÜbergib cden CSpieler cals CParameter, cidealerweise cals cconst-CRef



  • Hey, danke Leute,

    genau so hat es geklappt

    @DaddyFelix: war es für Dich anstrengend, mich auf die Schippe zu nehmen, ich fange eigentlich erst mit der intensiveren Verwendung von C++ an und da habe ich den Stil aus dem Lehrbuch erstmal übernommen, trotzdem DANKE 👍 👍

    CÜbergib cden CSpieler cals CParameter, cidealerweise cals cconst-CRef



  • GMoney597 schrieb:

    und da habe ich den Stil aus dem Lehrbuch erstmal übernommen

    Überlege dir dringend ob du dieses Lehrbuch nicht lieber wegwerfen willst. Es ist nicht zufällig von Jürgen Wolf, oder?
    Bücherliste


Anmelden zum Antworten