Frage : Überladen Ausgabeoperator



  • Hi , ich habe meinen Ausgabeoperator überladem, jedoch liefert der compiler mir das man das so nicht machen kann. 😞
    Ich kann mir auch in etwa denken warum , aber ich weiß leider nicht ob es nicht möglich ist oder ob man es anders machen muss.
    Also ich möchte gerne die ausgabe methode von Fixkomma Objekt b aufrufen, welches mir den inhalt der Fixkommazahl als String ausgibt.Somit besitzt die methode ausgabe wiederrum selbst objekte von ostream, darf man das vielleicht nicht? 😕

    wie gehts richtig? stehe mal wieder auf dem schlauch sorry ! :xmas1: hier mal der code was ich hab. Es funktioniert z.b wenn ich statt b.ausgabe(), b.getanzahlblabla() schreibe.

    std::ostream& operator <<(std::ostream &o, Fixkomma &b){
    
    o<<b.ausgabe();
    
    return o;
    
    }
    

  • Mod

    Das einzige was ich sehe ist die fehlende const-correctness. Es wäre gut, wenn du uns ein bisschen relevante Information geben könntest, zum Beispiel die Fehlermeldung und den Code. Siehe die ersten und letzten Links in meiner Signatur.



  • okay hier mal die oben genannte ausgabe methode :

    paar infos fürs verständnis:

    -getNumber() wandelt mir die die vorkommazahl + die nachkommazahl ( beides long long) in einen string zurück.
    -getanzahlnullen() liefert mir die nullen zurück die hinter das komma gehören, die verschwinden ja zunächst wenn man den string in long umgwandelt hat.
    -indexofpoint() liefert mir die stelle des kommas.
    -isLegal() prüft ob der string gültig ist also nur gültige asci zeichen enthält.

    die ausgabe habe ich mir sozusagen "zusammengebastelt", da das problem mit den nullen hinter dem komma bestand.

    void Fixkomma::ausgabe(){
    
    char* temp = this->getNumber() ;
    
    int anz = this->getanzahlnullen();
    int index= indexofpoint(temp);
    
    if(this->isLegal()==true){
    
    for(int i=0 ; i<index;i++){
    
    cout<<temp[i];
    
      }
    cout<<'.';
    
    for(int i=0 ; i<this->getanzahlnullen();i++){
    
    cout<<'0';
    
      }
    
    for(int i= 0 ; i <strlen(temp)-index-1;i++){
    
    cout<<temp[i+index+1];
      }
    
    }
    }
    }
    

    der compiler liefert folgenden fehler:
    In function 'std::ostream& operator<<(std::ostream&, Fixkomma&)':46|error: no match for 'operator<<' in 'o << ((Fixkomma*)b)->Fixkomma::ausgabe()'|


  • Mod

    Ausgabe gibt void zurück. Und macht ganz was anderes als du denkst, denn es schreibt nach cout. Guck dir noch mal an, wie das mit der Überladung der Stream-Operatoren funktioniert und was der Zweck dieser Technik ist.


Anmelden zum Antworten