Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Hilfe! Ich verliere mein Objekt :-(

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.06.2008, 12:40 Uhr
Unwissende
...die wirklich Unwissende 8-)


Hallo allerseits,

ich habe eine Klasse GObject erstellt, die hat die Membervariable m_Zeilencounter.
Dann habe ich eine Funktion "Vergeich()". dort wird ein Objekt der Klasse GOutput erstellt. Auf dieses Objekt wird in der Funktion "Synchroauslesen()" zugegriffen und der m_zeilencounter brav hochgezählt.
Wenn ich jetzt wieder in der Funktion "Vergleich()" bin (nachdem ich "Synchroauslesen()" fertig habe), ist mein datensatz1-Objekt mit den Werten gefüllt, die ich VOR Aufruf der Funktion "Synchroauslesen()" hatte....
WIESO?
Ich habe die leise Ahnung, dass ich irgendwo THIS oder so einbauen muss, aber ich weiß nicht wo und wie....
Wäre dankbar um jeden Tipp....


C++:
#ifndef GOutput_H
#define GOutput_H

//#include "Defines.h"
#include "fstream.h"

class GOutput
{

protected:

  char m_kapitel[1024];
char m_tabtitle[1024];
  bool m_tabtitle_vorhanden;
  bool m_tab_fertig;
  int m_zeilencounter;
public:



  //GOutput(char* name);
  GOutput();
  ~GOutput();

  // Kopieren der Daten
  void copy(GOutput*);
  GOutput* copy();


  void initialize();

  void setKapitel(char* name);
  char* getKapitel();
  void setTabtitle(char* name);
  char* getTabtitle();

  void setTabelle_fertig(bool flag);
  bool getTabelle_fertig();
  void setTabtitle_vorhanden_flag(bool flag);
  bool getTabtitle_vorhanden_flag();

  void legeBereichFest(char* linebuffer);
  bool Tabelle_fertig(char* linebuffer);

  void incZeilencounter();
  int getZeilencounter();
  void resetZeilencounter();
  void setZeilencounter(int wert);


  //int ermittleBlock(char* line, GeniaOutput daten);
  static char* className;
  virtual char* getClassName() const { return className; }

};
#endif // GOutput_H




Dann habe ich folgende Funktion Vergleich(), die wiederum Synchro_auslesen() aufruft:


C++:

void Vergleich(FILE* FI1,FILE* FI2,FILE* FO3)
{
//Vardekl
......
//Objekterzeugung

         GOutput datensatz1;
         GOutput datensatz2;
  
    //lese Zeile aus der ersten Datei ein
    cout<<endl;
    cout<<"Ergebnis der qualitativen Ueberpruefung: "<<endl;

     while (fgets(linebuffer1, MAX_LAENGE_ZEILE, FI1) != NULL)
    {
        //Zeilencounter1++;
        datensatz1.incZeilencounter();
        datensatz1.legeBereichFest(linebuffer1);


        while (fgets(linebuffer2, MAX_LAENGE_ZEILE, FI2) != NULL)            
       {
                    //Zeilencounter2++;
                    datensatz2.incZeilencounter();
                    datensatz2.legeBereichFest(linebuffer2);

                    if ((strcmp(datensatz1.getTabtitle(),datensatz2.getTabtitle())==0))
                    {

//HIER! Hier gehe ich mit meinen Objekten datensatz1 und datensatz2 rein
//Z.B. Zeilencounter= 10

                        bool fertig = Synchro_auslesen(FI1,FI2, FO3, datensatz1,datensatz2);
                        if (fertig)
                        {
                            rewind(FI2);
                            datensatz2.initialize();
//HIER habe ich wieder die Werte der Membervariablen (z.B. ZEILENCOUNTER=10), vor dem Funktionsaufruf Synchro_auslesen()  :(
                          
                        }

                    }
    
              }


        }

      }
    cout<<"Num Vergleich beendet"<<endl;
}


In der Funktion Vergleich wird wiederrum eine andere Funktion aufgerufen:

C++:
bool Synchro_auslesen (FILE* FI1,FILE* FI2, FILE* FO3,GOutput datensatz1, GOutput datensatz2)
{
    
//Vardekl
....

    int Zeilencounter1 = 0;
    int Zeilencounter2 = 0;

    while (fgets(linebuffer1, MAX_LAENGE_ZEILE, FI1) != NULL)
    {
            datensatz1.incZeilencounter();
            Zeilencounter1 = datensatz1.getZeilencounter();
            datensatz2.incZeilencounter();
            Zeilencounter2 = datensatz2.getZeilencounter();

            
            //hier wird eine Berechnung gestartet

                                      bool fertig = rechne(blablubb);
//z.B. ZEILENCOUNTER= 100000 nach Ende der Berechnungen...

    }
    return fertig = true;
}



--
__________________________________
Unwissenheit ist vorläufig- Dummheit für immer

Dieser Post wurde am 01.06.2008 um 12:48 Uhr von Unwissende editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.06.2008, 14:00 Uhr
Oliver
S2-Pixelgeneral


Wenn Synchro_auslesen die Objekte verändern soll, musst du sie per Referenz übergeben, ansonsten wird in Synchro_auslesen eine Kopie erstellt:


C++:
bool Synchro_auslesen (FILE* FI1,FILE* FI2, FILE* FO3,GOutput& datensatz1, GOutput& datensatz2)
...


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )

Dieser Post wurde am 01.06.2008 um 14:00 Uhr von Oliver editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.06.2008, 20:15 Uhr
~Unwissende
Gast


Hallo Oliver,

viiiiiiiiiiiielen Dank für den Tipp, das war echt die Lösung Hab echt schon ewig daran rumprobiert...
Ich gebe dir hiermit ein virtuelles Bier aus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: