Klasse für Personen??
-
nimm einfach std::string
und es gibt einen kleinen unterschied zwischnen char x und char * x,
der auch erklärt warum du nur ein zeichen erhälts
ich sag nur, wer gleich string benutzt ärgert sich später nicht darüber das ihm gewisse funktionen fehlen wenn er mit strings arbeiten will
-
Platy schrieb:
Am besten du nimmst char-Arrays, also:
char* Name = new char[30] //bei der Länge lass dir einen guten Wert einfallen...So brauchst du später auch nur die Zeiger an die Funktionen übergeben.
Wasn das für ein "toller" Ratschlag.
Schon mal was von Referenz-Parametern gehört.In einem anderen Beitrag habe ich std::string empfohlen bekommen, aber das geht bei mir irgendwie nicht.
Da machst du wohl irgendwas falsch. Aber mit dieser "Fehlermeldung" kannst du
leider nicht auf Unterstützung hoffen, da müsstest du dein Problem schon etwas
mehr, etwas genauer erläutern.
-
Also wenn ich das mit std::string mache, geht es nicht. Denke mal ich setzte das std::string falsch.

[cpp] #include <iostream> class Person { public: Person(std::string vorname); ~Person(); std::string getDaten(); void datenAusgeben(); private: std::string itsVorname; }; //Konstruktor Person::Person(std::string vorname) { itsVorname = vorname; } //Dekonstrukor Person::~Person() { } //Methode Datenausgeben std::string Person::getDaten() { return itsVorname; } void Person::datenAusgeben() { std::cout <<"Das ist ein Test.\n"; } int main() { std::string vorname; std::cout << "Geben Sie die Personalien ein:\n"; std::cout << "Vorname: "; std::cin >> vorname; Person Mike(vorname); std::cout << Mike.getDaten() << " ist die erste Person.\n"; Mike.datenAusgeben(); system("PAUSE"); } [/cpp]Wahrscheinlich hab ich wieder totalen Blödsinn gemacht
!Muss mir wohl dann mal das Kapitel über Zeiger vornehmen, wenn es keine andere Lösung gibt.
-
timkon schrieb:
Also wenn ich das mit std::string mache, geht es nicht.
dein compiler sagt also: geht nicht?
timkon schrieb:
Muss mir wohl dann mal das Kapitel über Zeiger vornehmen, wenn es keine andere Lösung gibt.
du willst den fehler also nicht finden und beseitigen?
-
timkon schrieb:
Also wenn ich das mit std::string mache, geht es nicht
WAS GEHT DENN NICHT. Compiler, Linker, Runtime, Fehlermeldung usw.

Es kann nie schaden wenn
#include <string>einbindet wenn man strings verwenden
-
also wenn ich #include <string> mache geht es.
Danke erstmal!
-
Hab zwar kein VC2005 zur Hand. Ich nehme trotzdem an das
#include <string>dein Problem löst.
-
Wenn du gerade am Ändern bist, dann mach bitte aus
Person::Person(std::string vorname) { itsVorname = vorname; }folgendes
Person::Person(std::string& vorname) { itsVorname = vorname; }
-
was erreiche ich damit?
-
kann man mit return auch 2 Variablen zurück liefern lassen?
Oder geht er nach 1 ner automatisch aus der Funktion?
[cpp] //zB return var1, var2; [/cpp]Meine ma gelesen zu haben, dass es funktioniert, kann mich aber täusche. Ich weiß, dass nach dem return die Funktion verlassen wird.

-
Du erreichst damit, das bei Übergabe des strings an den Konstruktor keine
Kopie erstellt wird sondern stattdessen eine Referenz auf deinen "vornamen"
übergeben wird. Das ist, wie dir sicher einleuchten wird, effizienter.Damit der Konstruktor diesen Wert auch nicht unbeabsichtigt ändert kann man dann
gleichPerson::Person(const std::string& vorname) { itsVorname = vorname; }verwenden.

-
timkon schrieb:
kann man mit return auch 2 Variablen zurück liefern lassen?
Oder geht er nach 1 ner automatisch aus der Funktion?
[cpp] //zB return var1, var2; [/cpp]Meine ma gelesen zu haben, dass es funktioniert, kann mich aber täusche. Ich weiß, dass nach dem return die Funktion verlassen wird.

Du kannst eine struct/class zurückliefern die dann natürlich aus mehreren
Teilen/Variablen "bestehen" kann.
Alternativ du kannst natürlich auch out-Parameter in deiner Funktionsdefinition
verwenden.Du solltest vielleicht mal die Konsultation eines Lehrbuchs in Betracht ziehen.
-
Hab ein Lehrbuch, aber manchmal ist es irgendwie so, dass ich, wenn ich grad etwas schreibe was brauche, was ich noch nicht kenne oder so...
Wie könnte dann der VOrschlag von dir aussehen?
Danke!
-
Platy schrieb:
Am besten du nimmst char-Arrays, also:
char* Name = new char[30] //bei der Länge lass dir einen guten Wert einfallen...So brauchst du später auch nur die Zeiger an die Funktionen übergeben.
Oh Gott, das währe so das übelste was man in dem Fall in C++ machen kann. Dann kannst du auch gleich reines C nehmen.
-
timkon schrieb:
Wie könnte dann der VOrschlag von dir aussehen?
Z.b. so:
#include <iostream> #include <string> std::pair<std::string, std::string> Foo() { return std::make_pair("Hallo!", "Tschuess"); } int main() { std::pair<std::string, std::string> Ergebnis = Foo(); std::cout << Ergebnis.first << std::endl << Ergebnis.second; }oder so:
#include <iostream> #include <string> struct StringPair { std::string first; std::string second; }; StringPair Foo() { StringPair t; t.first = "Hallo!"; t.second = "Tschuess!"; return t; } int main() { StringPair Ergebnis = Foo(); std::cout << Ergebnis.first << std::endl << Ergebnis.second; }mfg.