Speicherzugriffsfehler bei Zugriff auf Membervariable
-
Nabend zusammen,
also ich habe da ein Problem...
Ich habe die TForm1 - Klasse welche einen TEdit - Feld enthält(TEdit *K_NameEdit).
Dann habe ich in einer anderen Quelldatei noch ein Klasse (Kunden) die einen Ansistring namens name enthält.Nun wenn ich mit einer Elemtfunktion von Kunden auf das TEdit Feld den Ansistring name reinschreiben will kommt eine Laufzeit-Fehlermeldung wenn ich im gestarteten Programm die Funtion aufrufe:
Access violation at adress 00401C5F in module "MyProject.exe". Read of adress 00000000Hier etwas aus dem Quellcode:
c_Kunden.h
class Kunden { AnsiString name; AnsiString vorname; AnsiString adresse; AnsiString plz; AnsiString ort; public: Kunden(): name("<Name>"),vorname("<Vorname>"), adresse("<Strasse Nr.>"),plz("<Plz>"),ort("<Ort>") {} void __fastcall showStandard(TForm1 *myForm); };c_Kunden.cpp
void __fastcall Kunden::showStandard(TForm1 *myForm) { myForm->K_NameEdit->Text = name; // <<<<------ ERROR /* myForm->K_NameEdit->Text = "fjgglf"; <<<<---- So aber nicht. Funktioniert ! */ }main.cpp
void __fastcall TForm1::Info1Click(TObject *Sender) { K_PageControl->Visible=true; Kunden_C->showStandard(this); }...
....
...
Was mach ich falsch ???
-
Also ich komme jetzt einfach nicht mehr weiter.
Ich verstehe nicht wieso hier ein Fehler auftritt.
Habs jetzt mal nur zwei Dateien daraus gemacht und trotzdem der selbe Fehler...main.h
//--------------------------------------------------------------------------- #ifndef mainH #define mainH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <Menus.hpp> #include <ComCtrls.hpp> #include <DB.hpp> #include <DBGrids.hpp> #include <DBTables.hpp> #include <Grids.hpp> #include <ComCtrls.hpp> #include <DB.hpp> #include <DBGrids.hpp> #include <DBTables.hpp> #include <Grids.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TMainMenu *MainMenu1; TMenuItem *Beenden1; TMenuItem *Rechnungen1; TMenuItem *Artikel1; TMenuItem *Info1; TMenuItem *Info2; TPageControl *K_PageControl; TTabSheet *Kunden1; TTabSheet *Kunden2; TTabSheet *Kunden3; TDataSource *DataSource1; TDBGrid *DBGrid1; TTable *Table1; TEdit *K_SurnameEdit; TEdit *K_NameEdit; TEdit *K_AddEdit; TEdit *K_PlzEdit; TEdit *K_OrtEdit; TButton *But_Save; TButton *But_Reset; void __fastcall Beenden1Click(TObject *Sender); void __fastcall Info1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); //friend class Kunden; }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- class Kunden { AnsiString name; AnsiString vorname; AnsiString adresse; AnsiString plz; AnsiString ort; public: Kunden(): name("<Name>"),vorname("<Vorname>"), adresse("<Strasse Nr.>"),plz("<Plz>"),ort("<Ort>") {} void __fastcall showStandard(TForm1 *myForm); }; extern PACKAGE Kunden *Kunden_C; #endifmain.cpp
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "main.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; Kunden *Kunden_C; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall Kunden::showStandard(TForm1 *myForm) { myForm->K_NameEdit->Text = name; //<<<<<<-----ARGGHHH :warning: :warning: ERROR } void __fastcall TForm1::Beenden1Click(TObject *Sender) { Application->Terminate(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Info1Click(TObject *Sender) { K_PageControl->Visible=true; Kunden_C->showStandard(this); } //---------------------------------------------------------------------------Hier noch ein Link der mir aber nicht weitergeholfen hat
:
http://www.aldebaran.de/knowhow/articles/borlandcppbuilder/Habe unter Tools den CodeGuard aufgemacht und auf disabled gesetzt und alles andere was es zum deaktieren gab auch hat aber nicht gebracht

.....
.....
.....
.....
.....
-
Du hast
Kunden *Kunden_C;
stehen. Aber wo erzeugst Du die Instanz mit new ??? Ohne das geht das nicht!
-
Erstellst du auch irgendwo eine Instanz der Klasse Kunden? In deinem Code sehe ich nur einen uninitialisierten Zeiger.
-
@MFK
Ätsch, schneller!
-
Ohhhhhhhhh
*schäm*
wie konnte ich sowas nur übersehen.Vielen Dank

Der Compiler hätte mich wenigstens warnen können ??????
Danke nochmals

-
Noch ne Frage:
Wenn ich das dann wieder in vier Dateien unterteile wie am Anfang und in der main.cpp , c_Kunden.cpp inkludiere gibt das irgendwie einen Nachteil, weil c_Kunden ist nicht im Projekt drin denn wenn ich es ins Projekt einfüge verlang er von mir das ich in c_Kunden auch vcl.h einbinde obwohl das schon in main.cpp habe...
Wie soll ich das am besten aufteilen/machen werde noch 4-5 andere Klassen hinzufügen ???