tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
914
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    hallo

    noch ne andere Frage

    ich habe zwei Klassen

    Klasse A und Klasse B aber beide sind nicht miteinander verwand
    so Klasse A will jetzt eine Variable haben von Klasse B
    also

    b = KlasseB->Variable;

    die Unith ist natürlich includet und Klasse A als friend class deklaried
    und die Klasse B ist erschaffen (bevor Klasse A erschaffen wird).
    nun kommt aber bei dem aufruf der Funktion eine Fehlermeldung via zugriffsverletzung auf speicher, das selbe kommt auch wenn die klassen verwand sind und ich die Variable vererben will

    kann sein das ich das Falsch verstanden und es garnicht geht aber wie kann es dann regeln
    Geändert von FJK (30.06.08 um 15:02 Uhr)
     

  2. #2
    FireFlow FireFlow ist offline Mitglied Gold
    Registriert seit
    Feb 2004
    Beiträge
    213
    Kurzer Beispielcode wo das problem auftritt wär angebracht.

    Gruß
     
    --//--//--// My StillLife! //--//--//--
    Obere URL dient nur als Google-Push )

  3. #3
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    ähm ich arbeite in borland builder 5.0 c++

    der Quelltext ist zu lang um ihn hier zu posten

    es geht darum einen integer an eine ander Klasse zu übergeben damit die Klasse weitere Berechnungen durchführen kann

    wenn ihr wirklich einen Quellcode braucht denke ich mir noch einen aus
    Geändert von FJK (30.06.08 um 15:02 Uhr)
     

  4. #4
    FireFlow FireFlow ist offline Mitglied Gold
    Registriert seit
    Feb 2004
    Beiträge
    213
    Ich hab doch gesagt nicht DEN Quellcode sondern ein Minimalbeispiel wo das Problem auftritt oder klar wird was du vor hast.

    Gruß
     
    --//--//--// My StillLife! //--//--//--
    Obere URL dient nur als Google-Push )

  5. #5
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    Klasse A errechnet einen integer r
    Klasse A ruft eine Funktion auf Klasse B->rechnen(r);
    Klasse B bekommt die variable und soll damit weiterrechnen und dann ausgeben
    Geändert von FJK (30.06.08 um 15:03 Uhr)
     

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Du mußt uns wirklich schon Quelltext zeigen - deine Beschreibung ist zu oberflächlich. Ich frage mich warum du das nicht gleich machst, oder zumindest dann nachdem dich FireFlow 2mal danach gefragt hat?!

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    hallo

    A.h
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    //---------------------------------------------------------------------------
     
    #ifndef UAH
    #define UAH
    #include "UE.h"
     
    //---------------------------------------------------------------------------
    class TA
    {
     protected: 
                   int i;
     public:
             TA(int i);
             void rechnen(void);
    };
    #endif

    A.cpp
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "UA.h"
    #include "US.h"
    #include "UE.h"
     
    //---------------------------------------------------------------------------
     
    #pragma package(smart_init)
    TE *E;
    //================================================================TA::TA(int Eini)
    {
     i = Ein i;
    }
    //================================================================
    void TA::rechnen(void)
    {
     i++;
      E->geben(i);
    }
    //================================================================

    E.h
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    //---------------------------------------------------------------------------
     
    #ifndef UEH
    #define UEH
    //---------------------------------------------------------------------------
    class TE
    {
    friend class TA;
     
     protected:
             int B;
     
     public:
             TE();
             void geben (int i);
    };
     
    #endif

    E.cpp
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "UE.h"
    #include "US.h"
     
    //---------------------------------------------------------------------------
     
    #pragma package(smart_init)
    //================================================================
    TE::TE()
    {
      B = 1000000;
    }
    //================================================================
    void TE::geben(int i)
    {
    B = B*i;
    }
    //================================================================



    S.cpp
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "US.h"
    #include "UA.h"
    #include "UE.h"
     
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm2 *Form2;
    TE *E;
    TA *A;
     
    //---------------------------------------------------------------------------
    __fastcall TForm2::TForm2(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::FormCreate(TObject *Sender)
    {
     E = new TE();
     A = new TA(1);
     Timer1->Enabled=true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::Timer1Timer(TObject *Sender)
    {
     A->rechnen();
    }

    das problem tritt auf wenn rechnen aufgerufen wird
    abgeschwächter quellcode, da das "original" mehrere seiten lang ist
    Geändert von FJK (30.06.08 um 15:03 Uhr)
     

  8. #8
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Wie lautet denn die Fehlermeldung genau? Du bekommst du Fehlermeldung zur Laufzeit, ja? Dann ist vermutlich irgendein Zeiger nicht richtig initialisiert. Hast du denn schonmal mit einem Debugger geschaut wo genau das Problem ist und welchen Wert die einzelnen Variablen (vor allen Dingen Pointer) haben?
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  9. #9
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Du hast die Variable E 2-fach definiert. Einmal in A.cpp und dann nochmal in S.cpp. Also eigentlich ist sowas in C++ verboten und der Compiler (bzw. Linker) hätte sich da beschweren sollen...

    Du könntest z.B. alle übrigen Definitionen von E entfernen und dann

    E.h
    Code :
    1
    
    extern TE* E;

    E.cpp
    Code :
    1
    
    TE* E;

    Übrigens brauchst du dafür die Klasse TA nicht als friend von TE deklarieren. Mit Zugriffsrechten auf die einzelnen Elemente hat das nämlich nichts zu tun. Da hätte sich der Compiler schon beschwert und sich geweigert dein Programm zu übersetzen.

    PS: Was bedeutet eigentlich das #pragma package(smart_init)?

    /edit:
    Zitat Zitat von FJK
    kann man bilder hochladen?
    Ja, man kann. (Button "Anhänge verwalten")
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  10. #10
    Test Test ist offline Mitglied Gold
    Registriert seit
    Jul 2003
    Beiträge
    181
    Zitat Zitat von FJK
    das weiß ich auch nicht, das schreibt Borland auch selber wenn man eine neue Unit hinzufügt
    :
    "Mit #pragma package(smart_init) stellen Sie sicher, daß Units eines Packages in der durch ihre Abhängigkeiten festgelegten Reihenfolge initialisiert werden"
     

Ähnliche Themen

  1. JSF - Daten zwischen zwei Beans/Seiten austauschen
    Von KarlRannseier im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 10.01.11, 12:12
  2. UND-Verknüpfung zwischen zwei Klassen
    Von Dj Mike im Forum CSS
    Antworten: 3
    Letzter Beitrag: 06.03.09, 18:11
  3. [c#] Variablen zwischen Forms austauschen
    Von flogy92 im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 23.04.08, 16:08
  4. Antworten: 1
    Letzter Beitrag: 26.05.06, 13:24
  5. variablen zwischen dokumenten austauschen
    Von spiceMarine im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 23.05.06, 21:28