Vector2D/Array



  • Ich hab mal wieder nen Porblem, entweder ich steh auf'm Schlauch oder irgend was ist korrupt.

    //Global
    struct Vector2D
    {
        Vector2D() {}
        Vector2D(int x, int y)
        {
            this->x = x;
            this->y = y;
        }
        int x, y;
    };
    
    Vector2D Key[5];
    
    //Im Timer (Windows Froms)
    Key[0] = Vector2D( MousePosition.X, MousePosition.Y ); //MousePosition wird korrekt an den Konstruktor übergeben
    //Nacher steht in Key[1].x der Wert von MousePosition.Y(?!?) Der Rest bleibt unverändert
    
    Key[1] = Vector2D( MousePosition.X, MousePosition.Y );
    //X/Y steht in Key[1].y/Key[2].x
    

    Ich bin mir ziemlich sicher ich hab nen ganz groben Denkfehler drin, ich komm nur nicht drauf. 😞



  • Ich sehe nicht ganz, wo das Problem ist..

    Im übrigen solltest du alle Parameter korrekt initialisieren..

    struct Vector2D
    {
        Vector2D()
        :x ( 0 ),
        y ( 0 ){}
    
        Vector2D(int x, int y)
        : x ( x ),
        y ( y )
        {}
        int x, y;
    };
    

  • Mod

    Kann ich nicht nachvollziehen, sieht richtig aus und funktioniert auch. Zeig mal mehr von dem, was du machst.



  • Das ganze soll nen Bot für JamLegend werden siehe hier:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-241595-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-.html

    //Global
    struct Vector2D
    {
    	Vector2D():
    		x(0),
    		y(0){}
    
    	Vector2D(int x, int y):
    		x(x),
    		y(y){}
    
        int x, y;
    };
    
    HDC Screen_HDC;
    Vector2D Key[5];
    COLORREF Key_Color[5];
    
    //Form1_Load
    {
        Screen_HDC = CreateDC(L"DISPLAY", NULL, NULL, NULL);
    }
    
    //100ms Timer
    {
        //Funtioniert
        this->Position_X->Text = MousePosition.X.ToString();
        this->Position_Y->Text = MousePosition.Y.ToString();
    
        if(GetAsyncKeyState(VK_NUMPAD1)&1)
        {
            //Funktioniert
            this->Key_1_X->Text = MousePosition.X.ToString();
            this->Key_1_Y->Text = MousePosition.Y.ToString();
            //Besagter Fehler
            Key[0] = Vector2D( MousePosition.X, MousePosition.Y );
            //Folgefehler
            Key_Color[0] = GetPixel(Screen_HDC, Key[0].x, Key[0].y); 
        }
        //[...]Selbes für Key[1]-Key[4]
    
    	BYTE Tastatur[256];
    	if(!GetKeyboardState(Tastatur))
    	    return;
    
    	for(int i=0; i < 5; i++)
    	{
            //Überspringen wenn nicht aktiviert
    		if(i==0 && !checkBox1->Checked)
    			continue;
    		if(i==1 && !checkBox2->Checked)
    			continue;
    		if(i==2 && !checkBox3->Checked)
    			continue;
    		if(i==3 && !checkBox4->Checked)
    			continue;
    		if(i==4 && !checkBox5->Checked)
    			continue;
    
            //Folgefehler
    		COLORREF TempColor = GetPixel(Screen_HDC, Key[i].x, Key[i].y);
    
    		if(TempColor != Key_Color[i])
    		{
    			Tastatur[0x31 + i] |= 1;
    		}
    	}
    
    	SetKeyboardState(Tastatur);
    }
    


  • SWW13 schrieb:

    Key[0] = Vector2D( MousePosition.X, MousePosition.Y ); //MousePosition wird korrekt an den Konstruktor übergeben
    //Nacher steht in Key[1].x der Wert von MousePosition.Y(?!?) Der Rest bleibt unverändert
    

    Erkläre mal was ist genau der Fehler den du beobachtest? Du schreibst hier eigentlich nichts in Key[1] somit steht da nur undefiniertes zeug drinnen (in der neuen Version 0). In Key[0].x und Key[0].y solltest du deine Mausposition finden.



  • Das ist ja das komische, ich habe es Debuggt und habe folgendes festgestellt:

    Vor der Zuweißung:

    Key[0].x == 20904190(Irgendwas in der Richtung)
    Key[0].y == 20904190
    Key[1].x == 0
    Key[1].y == 0
    Key[2].x == 0
    [...]

    nach der Zuweißung(Key[0] = Vector2D( MousePosition.X, MousePosition.Y )):

    Key[0].x == 20904190(Irgendwas in der Richtung)
    Key[0].y == 20904190
    Key[1].x == MousePosition.Y
    Key[1].y == 0
    Key[2].x == 0
    [...]

    nach der Zuweißung(Key[1] = Vector2D( MousePosition.X, MousePosition.Y )):

    Key[0].x == 20904190(Irgendwas in der Richtung)
    Key[0].y == 20904190
    Key[1].x == 0
    Key[1].y == MousePosition.X
    Key[2].x == MousePosition.Y

    Bei den anderen hab ichs noch nicht getatstet, da müssten aber ähnliche Fehler auftretten.

    Ich glaub das Array hat irgend nen Macken:

    //Besagter Fehler
    Key[0] = Vector2D( 150, 250 );
    
    //Funktioniert perfekt
    Vector2D Test = Vector2D( 150, 250 );
    


  • SWW13 schrieb:

    Vor der Zuweißung:

    Vielleicht hast du das Array so zugeweißt, dass es Rot gesehen hat... 🤡


  • Administrator

    Tipp: Probier dein Programm zu verkleinern oder von einem kleinen Testprogramm aus, welches funktioniert, auf dein Programm hin zu vergrössern. Das kann einem helfen festzustellen, ab welcher Komponente der Fehler auftritt und in welchem Bereich er ist. Wenn man nur noch Bahnhof versteht, ist das oft ein sehr gutes Mittel.

    Also zum Beispiel zum Starten:

    struct Vector2D
    {
      Vector2D()
        : x(0)
        , y(0)
      {
      }
    
      Vector2D(int x, int y)
        : x(x)
        , y(y)
      {
      }
    
      int x, y;
    };
    
    int main()
    {
      Vector2D keys[5];
    
      keys[0] = Vector2D(100, 50);
      keys[1] = Vector2D(40, 200);
    
      // ... Mit zum Beispiel dem Debugger testen ... //
    
      return 0;
    }
    

    Dieses kleine Programm sollte ja funktionieren. Jetzt kannst du das nach und nach erweitern.

    Stichwort:
    http://de.wikipedia.org/wiki/Stub_(Programmierung)

    Grüssli



  • Hmm... korrupte Software/Debugger, das hatte ich bisher noch nie.
    Wenn ich das ganze mit ner MessageBox ausgeben lass stimmen die Angaben.

    Wenn ich das Array lokal in der Funktion deklariere funktioniert der Debugger.

    Naja, wenigstens weiß ich jetzt das mein Fehler woanders liegt und dass ich (zumindest in dem Projekt) mich nicht auf den Debugger verlassen kann.



  • Jetzt, wo dus sagst erinnere ich mich, dass ich das auch mal hatte, dass der Debugger mir falsche Werte angezeigt hat. Wenn ich die Werte ausgegeben habe, dann stimmten sie, aber wenn ich sie mir mit dem Debugger anschaute, waren sie falsch.

    Vielleicht hilft dir mal ein rebuild des gesamten Projektes..


  • Administrator

    drakon schrieb:

    Jetzt, wo dus sagst erinnere ich mich, dass ich das auch mal hatte, dass der Debugger mir falsche Werte angezeigt hat. Wenn ich die Werte ausgegeben habe, dann stimmten sie, aber wenn ich sie mir mit dem Debugger anschaute, waren sie falsch.

    Release Modus kompiliert, statt im Debug Modus? Sinnvoll debuggen kann man nur im Debug Modus 😉

    Grüssli



  • Ne, neu erstellen hilft nicht. Das ganze steht auf Debug, habs mal mit Release getestet und da tuts natürlich auch nicht.



  • Dravere schrieb:

    drakon schrieb:

    Jetzt, wo dus sagst erinnere ich mich, dass ich das auch mal hatte, dass der Debugger mir falsche Werte angezeigt hat. Wenn ich die Werte ausgegeben habe, dann stimmten sie, aber wenn ich sie mir mit dem Debugger anschaute, waren sie falsch.

    Release Modus kompiliert, statt im Debug Modus? Sinnvoll debuggen kann man nur im Debug Modus 😉

    Grüssli

    Nene, das war es iirc nicht. Aber manchmal spinnt VC auch einfach rum.. 😉

    Ist ein Weilchen her, aber ich Frage mich immernoch, was mit VC da wohl sagen wollte.. :p
    http://www.drakon.ch/pic/vc_error.jpg


Anmelden zum Antworten