Fehlermeldung bei Benutzung einer selbstgeschriebenen Ausgabefunktion



  • Ich habe eine Funktion geschrieben, die Text anzeigen soll. Diese Funktion wird in einer Methode der Klasse "Mensch" aufgerufen. Beim Kompilieren gibt es Probleme.

    Auszug aus der Fehlermeldung:

    D:\Programmierung\C++\Programme\RPG>g++ -std=c++14 -o RPG.exe RPG.cpp
    RPG.cpp: In member function 'void Mensch::anzeigen()':
    RPG.cpp:84:53: error: no matching function for call to 'std::__cxx11::basic_string<char>::basic_string(int&)'
               "Stufe     : " + static_cast<string>(stufe) + '\n' +
                                                         ^
    In file included from C:/MinGW/i686-w64-mingw32/include/c++/string:52:0,
                     from C:/MinGW/i686-w64-mingw32/include/c++/bits/locale_classes.h:40,
                     from C:/MinGW/i686-w64-mingw32/include/c++/bits/ios_base.h:41,
                     from C:/MinGW/i686-w64-mingw32/include/c++/ios:42,
                     from C:/MinGW/i686-w64-mingw32/include/c++/ostream:38,
                     from C:/MinGW/i686-w64-mingw32/include/c++/iostream:39,
                     from RPG.cpp:1:
    C:/MinGW/i686-w64-mingw32/include/c++/bits/basic_string.h:535:9: note: candidate: template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&)
             basic_string(_InputIterator __beg, _InputIterator __end,
             ^
    C:/MinGW/i686-w64-mingw32/include/c++/bits/basic_string.h:535:9: note:   template argument deduction/substitution failed:
    RPG.cpp:84:53: note:   candidate expects 3 arguments, 1 provided
               "Stufe     : " + static_cast<string>(stufe) + '\n' +
                                                         ^
    In file included from C:/MinGW/i686-w64-mingw32/include/c++/string:52:0,
                     from C:/MinGW/i686-w64-mingw32/include/c++/bits/locale_classes.h:40,
                     from C:/MinGW/i686-w64-mingw32/include/c++/bits/ios_base.h:41,
                     from C:/MinGW/i686-w64-mingw32/include/c++/ios:42,
                     from C:/MinGW/i686-w64-mingw32/include/c++/ostream:38,
                     from C:/MinGW/i686-w64-mingw32/include/c++/iostream:39,
                     from RPG.cpp:1:
    

    Auszüge aus dem Quellcode

    Auszüge aus der Klassendefinition

    class Mensch
    {
    	private:
    	string name;
    	int stufe;
    	int erfahrung;
    	int erfahrungB;
    
    	int lebenAkt;
    	int lebenMax;
    	int manaAkt;
    	int manaMax;
    
    	bool feuerpfeilErlernt;
    	bool feuerballErlernt;
    	bool heilungErlernt;
    
    void anzeigen()
    	{
    		ausgabe("Name      : " + name + '\n' +
    		        "Stufe     : " + static_cast<string>(stufe) + '\n' +
    				"Erfahrung : " + static_cast<string>(erfahrung) << "/" + static_cast<string>(erfahrungB) + '\n' +
    		        '\n' +
    		        "Leben : " + static_cast<string>(lebenAkt) + "/" + static_cast<string>(lebenMax) << '\n' +
    		        "Mana  : " + static_cast<string>(manaAkt) + '/' + static_cast<string>(manaMax) << '\n' +
    		        '\n');
    }
    

    Auszug aus der Hauptfunktion

    Mensch spieler("Dexter", 1, 0, 10, 10, 10, 1, 5);
    
    	cout << "[0] Programm schliessen" << "\n\n";
    
    	int auswahl;
    	while(auswahl != 0)
    	{
    		cout << "[1] Charakter anzeigen\n";
    		cout << "[2] Kaempfen\n";
    		cout << "Eingabe: ";
    		cin >> auswahl;
    		cout << '\n';
    
    		if(auswahl == 1)
    		{
    			spieler.anzeigen();
    		}
    

    Die Funktion "ausgabe"

    void ausgabe(string text)
    {
    	cout << text;
    	system("CLS");
    }
    

    Für alle Hilfestellungen bin ich sehr dankbar!



  • Das 'casten' ist der falsche Weg, um aus einer Zahl einen String zu erzeugen.
    Da ich sehe, daß du C++14 benutzt, könntest du dafür

    std::to_string(x)
    

    benutzen.

    Besser wäre es jedoch, wenn du direkt die Texte und Zahlen ausgibst (anstatt zuerst einen langen String zu erzeugen) - wie du es ja bei deiner Hauptfunktion auch schon machst:

    cout << "Name      : " << name << '\n'
         << "Stufe     : " << stufe << '\n';
    

    PS: Bei deinem bisherigen Code hast du ja + und << sowieso schon vermischt.
    Die Funktion ausgabe() ist also überflüssig - erst recht der anschließende CLS, der ja die Ausgabe wieder sofort löschen würde 😉



  • Vielen Dank, jetzt hat alles problemlos funktioniert!



  • Falsches Forum 😃



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Man könnte auch den output operator << überladen

    class Mensch {
    public:
        // ...
        friend std::ostream& operator<<(std::ostream& os, const Mensch& mensch);
    };
    
    std::ostream& operator<<(std::ostream& os, const Mensch& mensch)
    {
        return os << "Name      : " << mensch.name
                  << "\nStufe     : " << mensch.stufe
                  << "\nErfahrung : " << mensch.erfahrung << '/' << mensch.erfahrungB
                  // ...
    }
    
    // ...
    Mensch m;
    // ...
    std::cout << m << '\n';
    

Anmelden zum Antworten