Pfeil-Operator

xkris

Mitglied
Hallo Zusammen,

ich bin hier langsam am verzweifeln. Habe folgendes Problem:


Im Initialisierungsteil einer Klasse erzeuge ich einen Pointer *file auf ein Objekt einer selbstdefinierten Klasse "Data".
Im Konstruktor erzeuge ich ein Objekt dieser Klasse und weise anschliessend dem zuvor definiertem Pointer die Adresse dieses Objektes zu.

Code:
class SPR
{
    private:
        Goniometer G;
        Data *file ;
        KUSB3100 *sensor;
  
  public:
  SPR(string comment, string date,char *filename)
  {
      bool s_flag=true; //error-flag für Sensor-Objekt
      
      G.init();
      Data P(comment,date,filename);
      file=&P;
      KUSB3100 S(&s_flag);
      S.init(0);
      sensor=&S;  
  }
  ...

Wenn ich jetzt mittel Pfeiloperator auf eine der Methoden der Klasse Data zugreien möchte, schmiert das Programm ab.

Code:
file->write(line,0,k);

Compilieren kann ich es problemlos. Das schaut für mich so aus, als würde ich versuchen , auf nicht definierte Speicherbereiche zuzugreifen aber ich weiss nicht wo mein Fehler liegt.

Vielleicht weiß ja von euch jemand Rat

Ich sag mal vielen Dank im Voraus

Grüße

Kristian
 
Hi.

Du legst dort eine lokale (automatische) Variable im Konstruktor an, die der Compiler automatisch wieder wegräumt wenn der Block (also der Konstruktor) verlassen wird.

Das ist dann natürlich logisch, das an der Adresse wo der Zeiger file hinzeigt nichts mehr ist (zumal die Variable auf dem Stack angelegt wurde, der zwischendurch schon paarmal überschrieben wurde).

Du solltest die Mitglieder einer Klasse möglichst immer gleich in der Initialisierungsliste initialiseren (dafür ist sie schließlich da).

Zeiger auf lokale Variablen anzulegen funktioniert nicht - außer im Block in dem die lokalen Variablen definiert sind.

So könnte es gehen (ich weiß nicht so recht ob es das ist was du willst. Warum arbeitest du mit Zeigern? So wie ich das sehe brauchst du eigentlich keine):
C++:
class SPR
{
    private:
        bool s_flag;
        Goniometer G;
        Data *file ;
        KUSB3100 *sensor;

  public:
  SPR(string comment, string date,char *filename) : s_flag(true), file(0), sensor(0)
  {
      G.init();
      file = new Data (comment,date,filename);
      
      S.init(0);
      sensor = new KUSB3100 (&s_flag);
  }

  ~SPR()
  {
    delete file;
    delete sensor;
  }
  ...
 

Neue Beiträge

Zurück