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ürstd::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';