Elementfunktion zurückgeben?
-
hi,
wie kann ich saveStrings() in der selben Funktion zurückgeben?
Hier meine Lösung zur folgenden Übung:Schreiben Sie eine Klasse namens person, die den Namen und die Adresse einer Person repräsentiert. Benutzen Sie jeweils einen String, um diese Elemente abzuspeichern.
class person { public: std::string saveStrings(std::string name_copy, std::string addresse_copy) const; private: std::string name; std::string addresse; }; std::string saveStrings(std::string name_copy, std::string addresse_copy) const { name = name_copy; addresse = addresse_copy; return saveStrings(); // geht ja nicht, da Fehlermeldung(siehe unten)^^ }Hier die Fehlermeldung:
1>d:\wusersw\xxx\x\xxx\x\x\class_uebung.h(14) : error C2270: 'saveStrings': Modifizierer für Funktionen, die keine Memberfunktionen sind, nicht zulässig 1>d:\wusersw\xxx\x\xxx\x\x\class_uebung.h(15) : error C2065: 'name': nichtdeklarierter Bezeichner 1>d:\wusersw\xxx\x\xxx\x\x\class_uebung.h(16) : error C2065: 'addresse': nichtdeklarierter BezeichnerMit freundlichen Grüßen
Mag. Dr. Ing. Daniel
-
std::string **person::**saveStrings(...
Der rekursive Aufruf ist allerdings Blödsinn. Was willst du mit diesem return denn erreichen?
-
Vor die Implementierung von SaveString gehört ein "person::". Und hast du die richtigen Headerdateien eingebunden? Wenn nicht, dann muss <string> rein.
Und in der Funktion willst du doch einen String zurückgeben, mit "saveStrings()" rufst du aber eine Funktion auf (und übergibst nicht mal Parameter)
Was für einen String willst du denn zurückgeben?
-
Du mußt bei der Definition der Methode dazusagen, wohin sie gehört - sonst erzeugst du eine globale Funktion:
std::string person::saveStrings(...) { ... }(btw, bist du sicher, daß das 'const' dort hingehört? Das erklärt dem Compiler, daß this auf ein konstantes Objekt zeigt - und er wird sich weigern, die Zuweisungen 'name=name_copy;' zu übersetzen)
-
Und muß das const am Ende der Funktionsdefinition nicht weg? Die Strings werden doch in die Klasse geschrieben und verändern somit die Klasse...
-
hi
danke, hab ich ja voll vergessen^^
Schreiben Sie eine Klasse namens person, die den Namen und die Adresse einer Person repräsentiert. Benutzen Sie jeweils einen String, um diese Elemente abzuspeichern.
wie würde die lösung denn da heißen?
mfg
-
Stimmt schon halbwegs so, nur die "saveStrings"-Funktion braucht ja nix zurückzugeben. Also als Rückgabewert "void" und das "return" weglassen. Ach ja, und jeweils das "const". Solltest dir mal ein Grundlagentutorial durchlesen

-
Ein Konstruktor, dem auch gleich "name" und "adresse" übergeben werden können, wäre auch ganz nett^^
-
einmal zum Grundaufbau deiner Klasse
#include <string> class person { public: person(const std::string& name, const std::string& address) : name(name), address(address) {} // const, da das Objekt ja kopiert wird => nicht verändert wird. Referenz, da du ja nicht noch extra eine Kopie des std::strings beim übergeben erstellen willst ... private: std::string name; std::string address; };so ... dann überlädst du dir noch nen Streamoperator << und schon kannst du auch speichern
