Zugriffsverletzung beim Aufruf einer Methode



  • Hi,

    wie der Titel schon sagt, erhalte ich beim Aufruf einer Methode einer Klasse einen Zugriffsverletzungserror.

    Hier der Code der Klasse:

    class Toneunit
    {
      public:
    
    	//Variablen
    	int px, py, tx, ty;
    	int spe;
    	float ste, len, per;
    
    	//Methoden
    	void settarget (int ntx, int nty);
    	void draw (void);
    
    	//Konstruktor
    	Toneunit (int kpx, int kpy, int kspe);
    };
    void Toneunit::draw(void)
    {
    	Form1->ifield->Canvas->Pen->Color = clBlack;
    	Form1->ifield->Canvas->Brush->Color = clBlack;
    	Form1->ifield->Canvas->Rectangle(px-3,py-3,px+3,py+3);
    }
    

    (ifield ist ein TImage)

    Und hier wo ich die Methode aufrufe:

    for (i=0; i<numuns; i++)
    {
            uns[i]->draw();
    }
    

    Deklariert hab ich die Instanzen auch:

    Toneunit *uns[10];
    

    Und auch den Konstruktor aufgerufen habe ich:

    for (i=0; i<numuns; i++)
    {
           uns[i] = new Toneunit (random(300),random(300),5);
    }
    

    Ist da irgendwo ein Fehler drin?

    mfg
    Jakel



  • an welcher Stelle im Quellcode kommt denn die Fehlermeldung? verwende am besten den Debugger um die Stelle zu finden

    du hast übrigends vergessen den Konstruktor zu posten, aber ansonsten funktioniert der Quellcode, sofern man natürlich erst die Objekte erstellt und dann die Draw-Methode aufruft

    und wie groß ist numuns?



  • Sehr unschön ist aber der direkte Aufruf des Formulars über die globale Variable 'Form1'. Besser wäre es, wenn die Formular-Instanz ebenfalls als Konstruktor-Parameter übergeben würde.
    Auch die Variablen im public-Teil der Klasse sind kein gutes Design.

    Aber wie schon von Linnea gesagt, schau am besten mit dem Debugger alle Variablen durch.

    P.S. In C++ benutzt man nicht (void) zur Kennzeichnung von parameterlosen Methoden, sondern einfach ().


Anmelden zum Antworten