Class mit TImage - Problem

theGhost2006

Grünschnabel
Hallo!

Ich programmiere seit 3 Jahren C++, jedoch erst seit ein paar Woche mit dem CBuilder, nun hab ich ein problem, ich hoffe ihr könnt mir dort weiterhelfen.

Und zwar folgendes, ich möchte eine Klasse namens "ICar", diese soll ein TImage enthalten, dem ich später ein Bild, Größe, etc. zuweißen kann mit methoden der Klasse

Nun hab ich aber ein Problem damit, das ich ja das Bild auf Form1 anzeigen möchte.
Die Klasse brauche ich, um den Code sauberer zu halten und einfacher mit dem Bild umgehen kann.

Ich hab auf dem Form1 nur einen button der mir beim ausführen eine neue ICar Instanz erstellt. Danach möchte ich dem Bild die Top position ändern, nur da meckert das Programm, wegen Zugriffsfehler auf Speicher. Ich hab einiges im Internet recharchiert, aber ich finde keine Lösung. Wäre um Hilfe sehr dankbar.

Hier noch der Code:

H-Datei der Class ICar
Code:
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
#include "Unit1.h"

class ICar
{
  public:
         ICar();
         ~ICar();

         TImage *image;
};
CPP-Datei der Class ICar
Code:
#include "ICar.h"

ICar::ICar()
{
    image = new TImage(Form1);
    image->Parent = Form1;
}
BUTTON-Code
Code:
ICar *car1;
car1->image->Top = 20;
Ich denke das vielleicht der CBuilder Probleme hat während der Laufzeit ein TImage zu erzeugen, ich weiß es nicht. VC++ & MFC sind mir vertrauter :) !

Mit freundlichen Grüßen
Ghost
 

Turri

Erfahrenes Mitglied
Hallo,

Code:
ICar *car1;
car1->image->Top = 20;
du legst nur einen Zeiger an, und der zeigt ins Nirvana... deswegen dann die Zugriffsverletzung...
Probiers mal so:
Code:
ICar *car1 = new ICar(); // neues Objekt
car1->image->Top = 20;
Bei deinem TImage machstes ja genauso
Code:
image = new TImage(Form1);
da bekommt der "image" Zeiger auch nen new TImage Objekt

MfG Turri
 

theGhost2006

Grünschnabel
Danke für deinen Tipp! ;)

Ich hab jetzt herausgefunden warum es nicht geklappt hat, und zwar hatte ich folgendes gemacht:

ICar *car1;

Ich hätte dies machen sollen:

ICar *car1 = new ICar();

Ich hatte das mal gemacht nur kam dann ein fehler wegen dem ~ICar(); Constructor.
Ich hab den nicht geklariert daher hat es nicht geklappt. Es hat dsa gefehlt in der CPP-Date:

ICar::~ICar()
{

};


In diesem Sinne, vielen dank!
Super Support hier! ;)

Ghost