Typkovertierug in COORD



  • Hi Zusammen!

    Hab schnell ne kleine Frage:

    struct Position {
    	short X;
    	short Y;
    } pos;
    

    Wieso kann die Funktion nichts mit pos anfangen, obwohl COORD und pos doch die selbe Struktur haben?!

    SetConsoleCursorPosition(console, pos);
    


  • Weil Position und COORD trotzdem zwei verschiedene Typen sind. Egal wie es unter der Haube aussieht, sie sind unterschiedlich fuer den Compiler.
    Du musst entweder casten oder in der Struktur einen Umwandlungsoperator fuer COORD ueberladen.



  • Hier mal schnell ne kleine Antwort:
    Keine Ahnung. Dir wird kaum jemand helfen können, wenn du uns nicht sagst, wie SetConsoleCursorPosition genau aussieht und was COORD ist. Merk' dir aber, dass es egal ist, wie die interne Struktur zweier Klassen/structs aussieht - wenn sie anders heißen, dann sind das auch verschiedene Datentypen. Das sehen Funktionen nicht anders.



  • Okay habt recht also doch was ausführlicher.
    Ich hab iwann mal ein Programm geschrieben in der ich

    COORD
    

    aus windows.h benutzt habe, um den Cursor an Position X/Y innerhalb der Konsole zu positionieren. Daraufhin meinte jemand, dass ich mir doch auch selber so ne struct/class hätte schreiben können. Gesagt, getan! Nach euren Hinweisen, wenn ich sie richtig aufgefasst habe, sollte es nun in etwa so aussehen:

    class Position {
    private:
       short X;
       short Y;
    public:
       Position();
       void setX(short m_X) {X = m_X;}
       void setY(short m_Y) {Y = m_Y;}
       operator COORD() const {COORD tmp = {X,Y}; return tmp;}
    };
    

    Allerdings erkenn ich dann nicht so den Vorteil, warum ich mir ne eigene "COORD" schreiben sollte.

    [Rewind] schrieb:

    Dir wird kaum jemand helfen können, wenn du uns nicht sagst, wie SetConsoleCursorPosition genau aussieht und was COORD ist.

    Ich meinte die Funktion aus windows.h:

    BOOL
    WINAPI
    SetConsoleCursorPosition(
        __in HANDLE hConsoleOutput,
        __in COORD dwCursorPosition
        );
    


  • [Rewind] schrieb:

    Hier mal schnell ne kleine Antwort:
    Keine Ahnung. Dir wird kaum jemand helfen können, wenn du uns nicht sagst, wie SetConsoleCursorPosition genau aussieht und was COORD ist. ....

    Hiermal schnell eine kleine Klarstellung:
    Das braucht er nicht zu erklären, das tut die MSDN für die Win Api.
    Siehe hier:
    http://msdn.microsoft.com/en-us/library/ms686025%28v=vs.85%29.aspx



  • Und warum benutzt Du für Deine Koordinaten nicht den Typ COORD anstelle Deines Structs Pos?



  • Wie gesagt hatte ich ja auch gemacht, aber anscheinend gab es Leute die wohl eine eigens entwickelte Struktur bevorzugen!?


  • Mod

    Zero07 schrieb:

    Wie gesagt hatte ich ja auch gemacht, aber anscheinend gab es Leute die wohl eine eigens entwickelte Struktur bevorzugen!?

    Dann musst Du eben casten oder eine Typkonvertierung verwenden.
    Der C++ Compiler reagiert auf Namen und nicht auf die Form von Strukturen oder deren binäres Layout.


Anmelden zum Antworten