ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
914
914
EMPFEHLEN
-
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 regelnGeändert von FJK (30.06.08 um 15:02 Uhr)
-
Kurzer Beispielcode wo das problem auftritt wär angebracht.
Gruß
-
ä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 ausGeändert von FJK (30.06.08 um 15:02 Uhr)
-
Ich hab doch gesagt nicht DEN Quellcode sondern ein Minimalbeispiel wo das Problem auftritt oder klar wird was du vor hast.
Gruß
-
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 ausgebenGeändert von FJK (30.06.08 um 15:03 Uhr)
-
03.10.05 22:18 #6
- 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.
-
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 istGeändert von FJK (30.06.08 um 15:03 Uhr)
-
04.10.05 17:43 #8
- 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.
-
04.10.05 18:44 #9
- 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.hCode :1
extern TE* E;
E.cppCode :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:Ja, man kann. (Button "Anhänge verwalten")
Zitat von FJK
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Zitat von FJK
:
"Mit #pragma package(smart_init) stellen Sie sicher, daß Units eines Packages in der durch ihre Abhängigkeiten festgelegten Reihenfolge initialisiert werden"
Ähnliche Themen
-
JSF - Daten zwischen zwei Beans/Seiten austauschen
Von KarlRannseier im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 10.01.11, 12:12 -
UND-Verknüpfung zwischen zwei Klassen
Von Dj Mike im Forum CSSAntworten: 3Letzter Beitrag: 06.03.09, 18:11 -
[c#] Variablen zwischen Forms austauschen
Von flogy92 im Forum .NET Windows FormsAntworten: 2Letzter Beitrag: 23.04.08, 16:08 -
Modellierung von zwei Beziehungen zwischen zwei Klassen in Hibernate
Von janw im Forum JavaAntworten: 1Letzter Beitrag: 26.05.06, 13:24 -
variablen zwischen dokumenten austauschen
Von spiceMarine im Forum Flash PlattformAntworten: 2Letzter Beitrag: 23.05.06, 21:28





Zitieren
)
Login






