Zwei Klassen - Datenübernahme



  • Welche Werte werden denn falsch angezeigt?

    Ich würde darauf tippen, dein Problem ist, dass du in moveWindow Werte berechnest um die an MoveWindow zu übergeben und dabei erwartest dass due auch in den member Variabeln gespeichert werden. Aber das musst du schon machen.



  • Ja sorry, mit Bezeichnungen tue ich mich wirklich schwer, da immer was zu wählen, ist fast das anstrengendste für mich. Deshalb frage ich auch so ungerne nach, weil dies immer das erste ist, was bemängelt wird.

    Sinn der Sache soll sein, einmal die Konsole zu verändern und dann darauf aufbauend die entsprechenden KO-Werte zu ermitteln. Es soll aber auch möglich sein, die Werte der Konsole in einer Schleife zu ändern, wobei dann nachfolgend auch die KO-Werte geändert werden.

    Was dann da reinkommt wird entsprechend skaliert. Aber weil die Zeichen in der Konsole nicht annähernd quadratisch sind, kann ich nicht einfach die Spalten und Zeilen der Konsole dafür nehmen.



  • Wenn ich showConsole() zb so aufrufe

    void showConsole( Drawing& drawing )
    {
        //console.resize( 1200 );
        drawing.getCoords( 1200, 0, 0 );
    }
    

    und getCoords() in drawing so,

    void getCoords( unsigned int cwindow_size, int cpos_x, int cpos_y )
        {
            console.resize( cwindow_size );
            console.move( cpos_x, cpos_y );
            setCoords();
        }
    

    werden die KO-Werte korrekt angezeigt, aber nicht die Konsolenwerte. Doch die KO-Werte werden doch durch die Konsolenwerte bestimmt? Wieso werden in der Berechnung andere Werte genommen, als in showValues() angezeigt werden?



  • Du hast zwei Instanzen von Console, einmal in main, einmal in Drawing. In Drawing greifst du auf die Instanz von Drawing zu, die natürlich andere Werte hat, als die in main.

    Aber irgendwie ist dein Design, naja. Normalerweise brauchst du Dinge wie die Fenstergröße und die Position, Aspekt etc. gar nicht zu speichern, sondern rufst sie da ab, wo sie gebraucht werden. Dann hast du auch keine Probleme.



  • dref schrieb:

    Du hast zwei Instanzen von Console, einmal in main, einmal in Drawing. In Drawing greifst du auf die Instanz von Drawing zu, die natürlich andere Werte hat, als die in main.

    Aaha, schonmal ein Hinweis, mal schauen, ob ich damit weiterkomme, danke. edit: Aber wie mache ich Console in Drawing bekannt?

    Aber was meinst Du mit speichern von Fenstergröße und Position etc? Wenn ich die Konsole verändern will, muss es doch diese Werte irgendwo geben?



  • per Referenz, so wie du es ja bei der Funktion 'showConsole' auch schon gemacht hast:

    class Drawing
    {
      Console &console;
    
      Drawing(Console &console) : console(console)
      {
      }
    };
    


  • lemon03 schrieb:

    Aber was meinst Du mit speichern von Fenstergröße und Position etc? Wenn ich die Konsole verändern will, muss es doch diese Werte irgendwo geben?

    Klar gibt es die, das Betriebssystem muss die natürlich selber auch speichern.
    Aber da wäre schon ein mittelgroßes Redesign nötig und zumindest grundlegende Programmierkenntnisse mit der WinAPI.

    Einfacher wäre erstmal TH69s Vorschlag.



  • Achhaje, so hatte ich es ja schon fast einmal, danke 🙂

    Ich wollte dann wohl drawing irgendwie ohne Parameter aufrufen wollen.

    Drawing( Console& console ) : console( console ) {}
    

    Aber dieses Konstrukt scheint auch wichtig zu sein. Habe es schon oft gesehen, aber was bewirkt es eigentlich? Und sollte das Referenz-Symbol nicht hinter beim Typ stehen?



  • Die Zuweisung hinter dem Doppelpunkt nennt sich Initialisierungsliste.

    Und wo & (bzw. gilt auch für 😉 steht, das kannst du halten wie ein Dachdecker, also auch so

    Console & console
    


  • Achso, das stand ja sogar im Buch, hatte ich aber nicht erkannt.


Anmelden zum Antworten