[Gelöst] Objekt an Methode übergeben.



  • Hallo Community,

    ich habe ein Problem.

    wie übergebe ich ein Objekt an eine Methode einer anderen Klasse?

    void Klasse::Methode(//Objekt der Klasse Test) {
    std::cout << Test.name << std::endl;
    }
    

    Würde mich über eine Antwort freuen.

    Grüße,
    Philipp



  • void Klasse::Methode(Test const & test) 
    {
       std::cout << test.name << std::endl;
    }
    


  • Vielen Dank.

    Wenn ich das in den Funktionsprototypen in meiner Header-Datei als Parameter angebe, bekomme ich keinen Fehler.

    Gebe ich das in meiner .cpp Datei in der Methode an, sagt er mir das die Deklaration nicht kompatibel wäre.

    void setUserPos(World const & world);
    
    void User::setUserPos(World const & world) {
    
    	// hier kommt was rein
    
    }
    

    Übersehe ich gerade irgendetwas? 😉



  • Philipp1988 schrieb:

    Wenn ich das in den Funktionsprototypen in meiner Header-Datei als Parameter angebe, bekomme ich keinen Fehler.

    und welchen? möglicherweise die Meldung, daß er "World" nicht kennt?



  • Ist sie aber. Dann ist der Fehler in einem, von uns nicht einsehbaren, Bereich.



  • Dann poste ich noch etwas mehr Quelltext, damit ihr ggf. den Fehler finden könnt.

    User Klasse

    // user class
    class User {
    
    private:
    	std::string name;
    
    public:
    	void setUserPos(World const & world);
    
    };
    

    //Main.cpp

    #include <iostream> // Input,Output Bibliothek
    #include <string> // String Bibliothek
    #include <stdio.h>
    
    // Funktionsprototypen
    void showMenu();
    inline void clearConsole();
    
    // Klassendefinitionen
    #include "user.h"
    
    void User::setUserPos(World const & world) {
    
    	// hier kommt was rein
    
    }
    
    ...
    

    Hoffe der Quelltext reicht soweit aus 😉

    grüße

    // EDIT:

    Hier die Fehlermeldung in Bildform
    http://www.pb-weblog.de/fehler_meldung.png



  • <stdio.h> ist falsch! Richtig ist <cstdio>. Und wozu brauchst du die überhaupt?
    Poste doch bitte etwas zur Klasse World .



  • // Klasse world
    class World {
    
    private:
    	int world[10][10];
    
    public:
    	void createWorld();
    	void showWorld();
    
    };
    
    #include <iostream> // Input,Output Bibliothek
    #include <string> // String Bibliothek
    
    using std::cout;
    using std::endl;
    using std::cin;
    using std::string;
    
    // Funktionsprototypen
    void showMenu();
    inline void clearConsole();
    
    // Klassendefinitionen
    #include "user.h"
    #include "world.h"
    
    // Klasse World
    void World::createWorld() {
    
    	// Variablendeklaration
    	int i,z;
    
    	cout << "Erstelle Welt..." << endl << endl;
    	for(i=0;i<10;i++) {
    		for(z=0;z<10;z++) {
    			this->world[i][z] = 1;
    		}
    	}
    }
    
    void World::showWorld() {
    
    	// Variablendeklaration
    	int i,z;
    
    	for(i=0;i<10;i++) {
    		for(z=0;z<10;z++) {
    			cout << this->world[i][z];
    		}
    		cout << endl;
    	}
    }
    
    void User::setUserPos(World const & world) {
    
    	// hier kommt was rein
    
    }
    
    // Main-Funktion
    int main() {
    
    	// Variablendeklaration
    	int m_selektor = 0;
    
    	// Menu anzeigen
    	showMenu();
    	cin >> m_selektor;
    
    	if(m_selektor == 1) {
    
    		// Welt-Objekt erstellen
    		World rink;
    
    		// Spieler-Objekt erstellen
    		User player;
    
    		// Bildschirm leeren
    		clearConsole();
    
    		// Welt erstellen
    		rink.createWorld();
    
    		rink.showWorld();
    
    	} else if(m_selektor == 2) {
    		// Anwendung beenden
    		return 0;
    	}
    
    	cout << endl;
    	system("pause");
    }
    
    // Zeigt das Menu des Programmes
    // @return none
    void showMenu() {
    
    	cout << "############ Snack IT ############" << endl;
    	cout << "Bitte waehle aus folgenden Punkten aus:" << endl;
    	cout << "1. Spiel starten" << endl;
    	cout << "2. Anwendung beenden" << endl;
    	cout << "Ihre Auswahl: ";
    
    }
    
    // Löscht den Bildschirm
    // unschöne Methode, zurzeit keine andere gefunden
    // @return none
    inline void clearConsole() {
    	cout << string(50, '\n');
    }
    

    STDIO habe ich nur kurzzeitig genutzt, um etwas zu testen. Die war nun überflüssig 😉 danke.

    p.s: ja ich weiss - system sollte man nicht nutzen 😉 Habe nur zurzeit noch keine Möglichkeit gefunden, dass die Konsolenanwedung nicht direkt schliesst.



  • Wie ich es vermutet habe, an der Stelle ist der Typ World nicht bekannt. Du mußt die "world.h" in der user.h einbinden, damit der Compiler weiß, worüber du eigentlich sprichst.
    (alternativ auch eine Forward-Deklaration im Header und die world.h in der user.cpp einbinden)



  • Oh mein Gott! Es war klar... ein dummer Fehler.. ich danke dir Vielmals 🙂

    Wie kann man sowas umgehen ohne irgendwie ein Wirwarr aus includes in allen Header-Datei zu haben? Forward-Declaration? Dann werd ich mir das mal anschauen.

    Macht es eventuell auch Sinn eine Header-Datei zu haben, wo man alle benötigten Header-Dateien hat und diese dann in das Hauptprogramm einbinden?

    Grüße,
    Philipp



  • Philipp1988 schrieb:

    Macht es eventuell auch Sinn eine Header-Datei zu haben, wo man alle benötigten Header-Dateien hat und diese dann in das Hauptprogramm einbinden?

    nicht wirklich, damit erhöhst du nur unnötig die Abhängigkeiten zwischen den einzelnen Übersetzungseinheiten.



  • CStoll schrieb:

    Philipp1988 schrieb:

    Macht es eventuell auch Sinn eine Header-Datei zu haben, wo man alle benötigten Header-Dateien hat und diese dann in das Hauptprogramm einbinden?

    nicht wirklich, damit erhöhst du nur unnötig die Abhängigkeiten zwischen den einzelnen Übersetzungseinheiten.

    Okay, Danke dir 🙂


Anmelden zum Antworten