Mehrdeutiges Symbol



  • so, habs versucht.

    funktionieren tut es, wäre noch nett wenn mir jemand sagt ob mein verständnis dafür auch richtig ist



  • physikus schrieb:

    so, habs versucht.

    funktionieren tut es, wäre noch nett wenn mir jemand sagt ob mein verständnis dafür auch richtig ist

    ja hast du



  • 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 mir

    astring::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 ist

    dh 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
    }
    

Anmelden zum Antworten