Zugriffsverletzung
-
Original erstellt von junix:
Eine Instanz der Klasse eben...Wirklich pädagogisch wertvoll, junix. Muss man schon sagen. Was ist ein Bitmap? Na, ein Bitmap eben. Cool. Das wollte ich schon immer mal wissen.
@The.President: Wenn du ein Objekt deiner Klasse erstellst, dann ist das eine Instanz.
Schau junix, so einfach geht das!
-
void Datenbank:atenbankErstellen() // Funktion Datenbank erstellen { // Datenbank generieren F_haupt->risQuery->Close();
Was ist F_haupt? Das ist ja garnicht in der Klasse deklariert.
-
Fhaupt ist das Hauptformular.
Ich hatte bei der Klasse die Unit dazu eingebunden mit :
#include "U_repair.h"Damit sollte ich doch Zugriff auf das Formular und deren Elemente, in der Klasse haben. Soweit klappt das auch, aber sobald ich die Funktion aufrufe, kommt der Zugriffsfehler.
-
@Webfritzi: wenn man mit C++ Arbeitet sollte man zumindest die Terminologie kennen...
@The.President: Ist F_haupt oder wie die Variable hiess zum Zeitpunkt der Schutzverletzung gültig (also != NULL)?
Ausserdem schuldest du mir immernoch eine antwort auf meine Frage von oben.
-junix
-
Wenn ich versuche reinzusteppen, bricht dre Builder genau hier ab:
void __fastcall TF_haupt::TMI_datenbankErstellenClick(TObject *Sender)
{
GENAU AN DIESER STELLE - PC.DatenbankErstellen();
}Das Formular F_haupt ist ja in dem Moment vorhanden. D.H. Das Formular ist da, ich klick auf einen Button im Menü, und dann tritt dieser Fehler auf.
-
Ich habe jetzt einfach mal das aus der Hilfe gefischt:
Im Arbeitsspeicher existiert ein Objekt erst dann, wenn das Objekt mit dem Operator new (der den Konstruktor der Klasse aufruft) instantiiert wird.
Vielleicht hilft das ja weiter...
Oder musst du das hier nicht machen, weil, wie junix schon sagte, du das Teil ja auf dem Stack global erzeugt hast?MFG Aoeke
-
Original erstellt von Aoeke:
Oder musst du das hier nicht machen, weil, wie junix schon sagte, du das Teil ja auf dem Stack global erzeugt hast?Richtig. hier muss man das nicht machen.
-junix
-
nagut dann eben nicht.
man lernt nie aus...MFG Aoeke
-
Gibt es denn eine Möglichkeit, wie ich hier draus(F_haupt->risQuery-> ) eine Funktion machen kann ?
z.B. anstatt F_haupt->risQuery->Close();
Funktion->Close();
Danke im voraus....
-
Nein er braucht es nichtmehr mit new zu erstellen.
Er klatscht es ja global in den Speicher@President
Biste mal Step-by-Step in deine Funktion rein?
Wenn du nur mit "F8" über deinen Funktionsaufruf drübergehst schreit er natürlich an der Stelle des Aufrufs.. aber vielleicht ist der Fehler ja auch innerhalb deiner Klasse.
Mach dir noch nen Haltepunkt bei der Datenbank-Klasse und trace mal durch.
-
*grummel*
*deutet auf das Posting obendran*
Sorry Aoeke, die Site war bei mir nicht refresht *ist mal wieder zu spät gekommen*
-
Hab ich schon durch, aber immer das gleiche Problem.
Hat denn noch nie jemand mal eine Klasse geschrieben, und in eine Klasse.h gepackt, und in dieser Klasse auf Elemente von einem Formular zugegriffen ?Wenn ja könnt Ihr vielleicht mal ein Beispiel nennen ?
Danke im voraus....
-
Alles klar, hab jetzt einen Weg gefunden.
Danke nochmals für die Hilfe und Anregungen.......
-
Es gehört zum guten Ton, auch selbstgefundene Lösungen darzulegen, so dass ggf. auch andere davon profitieren können.
-
Du hast recht Janse, Sorry...
Also ich hab zu der Klasse die ich geschrieben hab (klasse.h), eine weitere Datei (klasse.cpp) geschrieben.
In der klasse.h hab ich nur die Klasse und deren Funktionsaufrufe reingeschrieben.
In der klasse.cpp hab ich alle Funktionen die zur klasse.h gehören programmiert.
Auch alle Elemente für externe Formulare sind dort aufgeführt.
Zusätzlich müssen noch die richtigen Header includet werden, und dann gings...Danke nochmal für die Hilfe...........