[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); };
#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 KlasseWorld
.
-
// 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