Kein Zugriff auf private Member



  • Nimm doch einfach das Pfeilchen...



  • sollte es jemand interessieren, die Lösung:

    ostream& operator<<( ostream& s, const astring& str )     //ausgeben 
    { 
    		astring::buchstabenliste *temp=str.beginn;
    
    		return s << (*temp).buchstabe;
    


  • ich habe dir schon in deinem ersten thread gesagt das das speichern eines strings als zeigerverkette liste wohl der schlechteste ansatz ist.

    es sei denn du musst einen lehrer befriedigen.



  • inp schrieb:

    es sei denn du musst einen lehrer befriedigen.

    Gut erkannt 😉

    allesdings läuft meine schleife jetzt auch nicht.

    astring::buchstabenliste *temp=str.beginn;
    
    	while ((*temp).buchstabe!='\0')			//
    	{
    		return s << (*temp).buchstabe;
    		temp=temp->next;
    

    Das "H" bekomme ich zwarausgegeben, aber dann ist schluss.
    kein zweiter schleifendurchlauf



  • Das liegt daran dass die Funktion bei "return" beendet wird.



  • ja, und wie mach ich das ohne return????



  • Nun, indem Du nicht "return" schreibst. Return beendet nunmal die Funktion und legt den Rückgabewert fest. Vermutlich solltest Du in der Schleife einfach nur die Ausgabe auf den Stream machen und anschließend, nach Abarbeitung der Schleife, die Rückgabe mit "return s;" auslösen.



  • Edit: Unsinn.



  • physikus schrieb:

    ja, und wie mach ich das ohne return????

    Hi,

    überleg' doch mal kurz, was Du eigentlich machen möchtest bei der Ausgabe: Möchtest Du EINMAL einen Buchstaben ausgeben ? Oder möchtest Du ALLE Buchstaben ausgeben ?

    In Deinem Statement s << (*temp).buchstabe; wird nur auf EINEN Buchstaben verwiesen ... (*)

    physikus schrieb:

    sollte es jemand interessieren, die Lösung:

    ostream& operator<<( ostream& s, const astring& str )     //ausgeben 
    { 
    		astring::buchstabenliste *temp=str.beginn;
    
    		return s << (*temp).buchstabe;
    

    BTW: temp->buchstabe hätte es auch getan. ... oder gar direkt (temp braucht man nicht): str.beginn->buchstabe 😃

    Gruß,

    Simon2.

    (*) HINT: Stichwort ist "Schleife".



  • struct buchstabenliste { 
       char buchstabe; 
       buchstabenliste *next;
    
       friend std::ostream & operator<<(std::ostream & os, buchstabenliste const * bs)
       {
          if (bs != 0) {
             os << bs->buchstabe << bs->next;
          }
          return os;
       }
    };
    
    //------------
    
    ostream& operator<<( ostream& os, const astring& str )
    { 
       return os << *str.beginn;
    }
    


  • Hi Helium,

    das löst aber noch nicht physikus' "Problem des ersten Buchstabens"...

    Gruß,

    Simon2.



  • Muss ich den ganzen scheiß jetzt ernsthaft lesen, statt nur zu überfliegen? Was ist denn das Problem des ersten Buchstabens? Ich dachte es geht einfach darum alle Buchstaben auszugeben, verdammt.



  • Helium schrieb:

    ...Was ist denn das Problem des ersten Buchstabens? Ich dachte es geht einfach darum alle Buchstaben auszugeben, verdammt.

    Hoppla --- da habe ich mich "verlesen".

    Sorry, ziehe alles zurück.

    Gruß

    Simon2.



  • Alles klar, jetzt funktionierts.
    Danke an alle die geholfen haben.

    while ((*temp).buchstabe!='#')			//
    	{
    		s << (*temp).buchstabe;
    		temp=temp->next;
    	}
    


  • Warum benutzt du nicht durchgängig den -> Operator?

    while (temp->buchstabe!='#')            //
    {
        s << temp->buchstabe;
        temp=temp->next;
    }
    


  • ... und bist Du sicher, dass am Ende (und nur da) JEDES Strings ein '#' kommt ?
    Bei Strings ist eigentlich (wenn überhaupt) als Begrenzer '\0' üblich.
    Oder (IMHO besser): Was spricht dagegen, dass sich astring die Länge des Strings merkt ?
    Schließlich bekommt es die Länge bei der Initialisierung ebenso mit wie bei zukünftigen Operationen. Außerdem kann dann Dein atring alle char's (oder sogar ganz andere Typen) speichern.

    Als "Mischform" könntest Du "Buchstabenliste" (*) um ein Element "bool isLetztes;" erweitern, das astring pflegt.

    (*) BTW "Buchstabenliste" hiesse besser "BuchstabenlistenElement".
    😉

    Gruß,

    Simon2.


Anmelden zum Antworten