Mehrdeutiges Symbol
-
guck dir am besten mal irgendwo ne erklärung von namespaces an. die hier z.b.: http://de.wikibooks.org/wiki/C++-Programmierung:_Namensräume
scheinst es aber grundlegend bereits verstanden zu haben.
-
So, als nächstes würde ich gerne << überladen, das funktionierte aber auch nicht so richtig.
//main int main() { astring str ='a'; cout << str << endl; /klasse private: char a; }; //Nicht-Member Funktionen fuer Ein- und Ausgabe ostream& operator<<(ostream&,astring); //methode ostream& operator<<(ostream& s, astring astr) { return s << astr; }ich bekomme zwar keinen fehler, aber ausgeben tut er auch nix
-
physikus schrieb:
So, als nächstes würde ich gerne << überladen, das funktionierte aber auch nicht so richtig.
//main int main() { astring str ='a'; cout << str << endl; /klasse private: char a; }; //Nicht-Member Funktionen fuer Ein- und Ausgabe ostream& operator<<(ostream&,astring); //methode ostream& operator<<(ostream& s, astring astr) { return s << astr; }ich bekomme zwar keinen fehler, aber ausgeben tut er auch nix
ostream& operator << (ostream& s, astring const& astr) { return s << astr.a; }
-
"astring::a": Kein Zugriff auf private Member
wenn ich a public mache bekomm ich einen ganzen haufen fehler
-
physikus schrieb:
"astring::a": Kein Zugriff auf private Member
wenn ich a public mache bekomm ich einen ganzen haufen fehler
class astring { public: ... char get_a() { return a; } private: char a; } ... ostream& operator << (ostream& s, astring const& astr) { return s << astr.get_a(); }
-
char astring::geta() { return astring::a; } ostream& operator << (ostream& s, astring astr) { return s << astr.geta(); } public: astring (char x); char geta() ; private: char a; int main() { astring str ='X'; cout << str << endl;so gibt er mir zwar was aus, aber anstelle dem X ein seltsames zeichen???
-
ich befürchte fast in a steht nichts sinnvolles drinnen

wahrscheinlich fehlerhaft initialisiert ?ausserdem musst du a nicht mit dem klassennamen qualifizieren wenn du dich innerhalb einem definierten scope ( astring:: ) befindest
char astring::geta() { return astring::a; }das reicht vollkommen
char astring::geta() { return a; }
-
so , jetz gehts. da ich die char in eine liste einbinden will hatte ich das auch direkt versucht. Dadurch ging das nicht.
war wohl ein denkfehler von mir[/cpp]astring::astring(char x)
{
a=x;
/*
struct Buchstabenliste {
char buchstabe;
Buchstabenliste *next;} b1;b1.buchstabe=x;
*/
}char astring::geta()
{
return a;
}[cpp]aber nochmals danke für deine (eure) hilfe
-
physikus schrieb:
so , jetz gehts. da ich die char in eine liste einbinden will hatte ich das auch direkt versucht. Dadurch ging das nicht.
war wohl ein denkfehler von mirastring::astring(char x) { a=x; /* struct Buchstabenliste { char buchstabe; Buchstabenliste *next;} b1; b1.buchstabe=x; */ } char astring::geta() { return a; }aber nochmals danke für deine (eure) hilfe
ich hab mich die ganze zeit über gewundert was du für einen seltsamen string machst

du solltest nach möglichkeit vermeiden einen string als zeigerverkette liste von einzelnen chars zu machen.
die grösse der datentypen variiert von implementation zu implementation.
aber ein char wird fast immer und überall 1byte gross sein, wobei ein pointer auf ein objekt 4bytes gross istdh du speicherst dir pro zeichen nicht 1byte sondern 5byte, wegen alignment werdens wohl 8byte werden.
dh ein string von 1mb ist dann in wirklichkeit 8mb gross, das ist die wohl schlechteste art und weise einen string zu speichern.
struct buchstabenliste { char a; // 1 byte gross buchstabenliste *next; //4 byte gross }