problem mit char[]
-
hi,
ich erbitte mir hilfe von euch, bei der lösung folgendes problemes://Klasse mit Implementierung class Messreihe { public: Messreihe(char name[]="") { name=name; } void ausgabe(ostream&os) { os << name; return os; } //... private: char name[128]; }; //Main int main(int argc, char**argv) { Messreihe test("testReihe"); test.ausgabe(cout); //hier kommt nur müll raus return 0; }
warum kommt bei der ausgabe nur "müll" raus?
kann mir da jmd helfen bei der beantwortung dieser frage?ich darf KEINE strings nehmen, sonder muss das mit char-arrays machen, ist vorgabe
danke im vorraus
mfg _mika_
-
Die Anweisung name=name ist doppelt falsch:
1. Erreichst du gar nichts, da du hier die interne Variable der internen Variable zuweist, rechts vom Gleichzeichen heißt nicht "Parameter nehmen" ;). Nenn die Klassenvarible am besten anders, viele haben sich angewohnt "m_" als Präfix zu benützen (Achtung Glaubenskrieg).
2. Kann man Arrays (und ein C-String ist in nunmal ein char-Array) nicht einfach mit = zuweisen!
Außerdem ist der Parameter nicht konstant, was wiederrum eine Schwäche ist.
Eine bessere Lösung könnte so aussehen:
Messreihe (const char* name) { strcpy(m_name,name); }
MfG SideWinder
-
Und seit wann haben void-Funktionen Rückgabewerte?
void ausgabe(ostream&os) { os << name; return os; }
Was spricht dagegen, anstatt os.. einfach cout<<name; zu schreiben?
Greetz,
Neo
-
noch besser fänd ich einen überladenen ausgabeoperator
friend std::ostream &operator << (std::ostream &s, const Messreihe &m) { return s << "Messreihe: " << m.name << std::endl; }
-
SideWinder schrieb:
Messreihe (const char* name) { strcpy(m_name,name); }
hm, stimmt, da gab es doch mal ne strcpy()-funktion
danke
...und NeoInferno, du konntest den hintergrund nicht wissen, klar ist es einfacher, cout << name; zu schreiben, aber...
Messreihe m; ofstream aus("test.txt"); m.ausgabe(aus); //ausgabe in datei schreiben m.ausgabe(cout); //ausgabe auf den standardausgabestrom (screen)
...es wurde mir befohlen (;)) eine ausgabestromumlenkung zu implementieren, die verschiedene ausgabeströme übernehmen kann
...und miller_m, es war bereits ein uml-diagramm gegeben ;)... konntest du aber nicht wissen, das mit dem ausgabeoperator ist mir aber auch schon durch den kopf gegangen, aber aufgaben bleiben nun mal aufgaben
danke für die posts
-
mika schrieb:
...und miller_m, es war bereits ein uml-diagramm gegeben ;)... konntest du aber nicht wissen, das mit dem ausgabeoperator ist mir aber auch schon durch den kopf gegangen, aber aufgaben bleiben nun mal aufgaben
stört den operator nicht wohin zu ihn umleitest
Messreihe m("irgendwas"); ofstream file("foo.bar"); file << m; file.close();
[edit]
tags