Problem mit Objekt einer Klasse und String Variable



  • Tag

    Ich möchte mittels der Variable currentroom (string currentroom) eine Funktion realisieren, mit welcher ich mittels dieser Funktion einen Text ausgeben lassen kann, welcher im Besitz einer Klasse ist (currentroom.ShowDesc()). Nur Funktioniert das ganze nicht und der Compiler gibt eine Fehlermeldung aus!!!

    Hier folgt noch der Gesamte Quellcode des bissherigen Programms (alle meiner Meinung nach wichtigen Stellen sind hervorgehoben):

    // Header Dateien-------------------------------------------------------------------
    #include <windows.h>
    #include <iostream>						
    #include <fstream>						
    #include <string>
    #include <string.h>	
    #include <list>									
    using namespace std;
    
    //Hier werden alle RoomID's gespeichert, wird benötigt um eine eindeutige Identifikation zu ermöglchen
    list<string> LRoomID;
    list<string>::iterator xid;
    
    //Spielvariablen
    bool start = false;
    string sex; // Ist der Spieler männlich oder weiblich
    string currentroom; //In welchem Raum befindet sich der Spieler gerade
    bool commandexists; // Existiert der vom Spieler eingegebener Befehl
    
    #define QUIT 0
    #define PLAYING 1
    
    // CRoom Klasse----------------------------------------------------------------
    class CRoom
    {
    	public:
    		CRoom(string ID, string description); // ID muss gleich wie der Raum selber sein
    		~CRoom(); 
    
    		//Gibt Text auf Bildschirm aus
    		void ShowDesc();
    
    		//Funktion gibt Raumbeschreibung zurück
    		[b]string GetDesc();[/b]
    
    		//Variable wird für das Raum wechseln bzw ansehen benötigt
    		string m_CurrentRoom;
    
    	protected:
    		string m_ID;
    		[b]string m_Description;[/b]
    };
    
    // CRoom Funktionen------------------------------------------------------------
    
    // Wird benötigt um zu überprüfen ob Raum existiert
    bool roomexists = false;
    
    CRoom::CRoom(string ID, [b]string description[/b])
    {
    	//Durchsucht die gesamte Liste nach der selben ID wie im Konstruktor angegeben
    	for(xid=LRoomID.begin();xid!=LRoomID.end();xid++)
    	{
    
    		if(ID == *xid) // Wenn ID schon existiert
    		{
    			cout << "ID wird schon verwendet!!!\n"; //Text ausgeben und Schleife verlassen.
    		    Sleep(1000);
    			roomexists = true;
    			break;
    		}
    		else
    		{
    		}	
    	}
    
    	if(roomexists) //Wenn der Raum bzw die ID schon existert
    	{
    		CRoom::~CRoom(); //Dekonstruktor aufrufen
    	}
    	else //Sonst Raum mit Werten versehen und die neue ID am Ende der Liste einschreiben
    	{
    		LRoomID.push_back(ID);
    		roomexists = false;
    
    		m_ID = ID;
    		m_CurrentRoom = m_ID;
    		[b]m_Description = description;[/b]
    
    		//Map für Ausgänge erstellen
    	}
    }
    
    CRoom::~CRoom() //Dekonstruktor
    {
    	if(m_Description.c_str())
    	{
    		m_Description.erase();
    	}
    }
    
    [b]void CRoom::ShowDesc() // Gibt die Beschreibung des Raumes auf den Bildschirm aus.
    {
    	cout << m_Description;
    }[/b]
    
    string CRoom::GetDesc()
    {
    	return m_Description;
    }
    
    //Räume werden initalisert-------------------------------------------------------------------
    [b]CRoom Start("Start", "Das ist der erste Raum dieses Adventures ich hoffe es werden noch viele \nfolgen...\n\n");[/b]
    
    //CObjekt Klasse-----------------------------------------------------------------------------
    class CObjekt
    {
    	public:
    		CObjekt(string description, float weight);
    
    	protected:
    		string m_Description;
    		float m_Weight;
    };
    
    //CObjekt Funktionen-------------------------------------------------------------------------
    CObjekt::CObjekt(string description, float weight)
    {
    	m_Description = description;
    	m_Weight = weight;
    }
    
    //CPlayer Klasse-----------------------------------------------------------------------------
    class CPlayer
    {
    	public:
    		CPlayer(string name);
    
    		void ShowStat();
    
    		void ShowInv();
    
    	protected:
    		string m_Name;
    		int m_MaxLp;
    		int m_Lp;
    		int m_Erf;
    		int m_MaxFh;
    		int m_Fh;
    
    };
    
    //CPlayer Funktionen------------------------------------------------------------------------
    CPlayer::CPlayer(string name)
    {
    	m_Name = name;
    	m_MaxLp = 30;
    	m_Lp = m_MaxLp;
    	m_MaxFh = 100;
    	m_Fh = m_MaxFh;
    	m_Erf = 0;
    }
    
    void CPlayer::ShowStat()
    {
    	cout << "\n";
    	if(sex == "m" || sex == "maennlich")
    	{
    		cout << "Du schaust dich in deinem kleinen Handspiegel, welchen du per Zufall \nmit dir herumtraegst, an und siehst:\n\n";
    		cout << "----------------------------------------------------------------------------\n";
    		cout << "| Du bist Brueder " << m_Name << ", welchjeniger Vater Kurt finden muss    |\n";
    		cout << "|                                                                 |\n";
    		cout << "| Lebenpunkte: " << m_Lp << " von " << m_MaxLp << "             |\n";
    		cout << "| Erfahrungspunkte: " << m_Erf << "                           |\n";
    		cout << "| Glauben: " << m_Fh << " von " << m_MaxFh << "           |\n";		
    		cout << "|                                                       |\n";
    		cout << "----------------------------------------------------------------------------\n\n";
    	}
    	else
    	{
    		cout << "Du schaust dich in deinem kleinen Handspiegel, welchen du per Zufall \nmit dir herumtraegst, an und siehst:\n\n";
    		cout << "----------------------------------------------------------------------------\n";
    		cout << "| Du bist Schwoschter " << m_Name << ", welchjenige Vater Kurt finden muss |\n";
    		cout << "|																			|\n";
    		cout << "| Lebenpunkte: " << m_Lp << " von " << m_MaxLp << "					    |\n";
    		cout << "| Erfahrungspunkte: " << m_Erf << "                                        |\n";
    		cout << "| Glauben: " << m_Fh << " von " << m_MaxFh << "                               |\n";	
    		cout << "|																			|\n";
    		cout << "----------------------------------------------------------------------------\n\n";
    	}
    }
    
    //Funktionen------------------------------------------------------------------------
    [b]void ShowRoom(CRoom &room) // Funktion gibt Raumbeschreibung zurück
    {
    	cout << "\n" << room.GetDesc() << "\n";
    }[/b]
    
    int Input(CPlayer &player) //Funktion zur Eingabe und Weiterverarbeitung von Befehlen
    {
    	commandexists=false;
    	string command = "";
    
    	cout << "|-> ";
    	cin >> command;
    
    	if(command == "quit" || command == "end")
    	{
    		return QUIT;
    		commandexists=true;
    	}
    
    	if(command == "stat" || command == "info" || command == "status" || command == "sp")
    	{
    		player.ShowStat();
    		commandexists=true;
    	}
    
    	if(command == "schaue" || command == "b" || command == "betrachte")
    	{
    		ShowRoom(currentroom);
    		commandexists=true;
    	}
    
    	if(!commandexists)
    	{
    		cout << "Dieser Befehl existiert nicht. Sparschaeler stehe dir bei\n\n";
    	}
    }
    
    // Hauptschleife--------------------------------------------------------------------------
    int main()
    {
    	string playername="";
    
    	if(!start)
    	{
    		cout << "Willkommen zum TextAdventure Finding Kurt \n\n";
    
    		cout << "Gib bitte deinen Namen ein: ";
    		cin >> playername;
    		cout << "\n\nund zu guter letzt bist du maennlich (m) oder weiblich (w)? ";
    		cin >> sex;
    		if(sex == "m" || sex == "maennlich")
    		{
    			cout << "\n\nSei Gegruesst Brueder " << playername << " !!!\n";
    		}
    		else
    		{
    			cout << "\n\nSei Gegruesst Schwoschter " << playername << " !!!\n";
    		}
    		cout << "Moege das Spiel nun beginnen\n\n";
    
    		cout << "                               PS: please visit www.vater-kurt.ch.vu";
    		Sleep(1250);
    		system("cls");
    
    		start = true;
    	}
    
    	// Spieler wird initalisiert...
    	CPlayer Player(playername);
    
    	currentroom = "Start";
    
    	ShowRoom(Start);
    	while(1)
    	{
    		if(Input(Player) == QUIT )
    		{
    			break;
    		}
    		Input(Player);
    	}
    
    	return 1;
    }
    


  • du hast als globale variable (was an sich schon unschön ist, versuche globale variablen zu vermeiden) eine variable

    string currentroom;

    die du dann an die funktion

    ShowRoom(currentroom);

    übergibst. nur leider erwartet die funktion ShowRoom als parameter ein Objekt der Klasse CRoom.

    siehe die deklaration:

    void ShowRoom(CRoom &room)

    und bitte das nächste mal auch die fehlermeldung mit posten.

    was dann noch ist, weiterschauen.

    so long erstmal.



  • Der Paramter von ShowRoom() ist eine Referenz auf ein CRoom-Objekt, Du versuchst aber, einen string zu übergeben. Das wirst Du irgendwie änden müssen, z.B. indem aus currentroom eine Instanz von CRoom machst oder ShowRoom() als Parameter einen string bekommt.

    Du solltest übrigens die Fehlermeldung (die eben dieses besagt) in Zukunft mitangeben, sonst muss man nämlich 'raten', wo der Fehler liegt.

    Edit: Ich schaffe es immer wieder, zu spät zu sein 😕



  • zwei leute zwei gleiche gedanken 😃


Anmelden zum Antworten