Kann von Eventhandler auf eigen definiertes Klassenobjekt nicht zugreifen.
-
Hallo,
ich versuche vergebens in einem Eventhandler (zu einem Button) auf mein Klassenobjekt (PP) zuzugreifen um dort Werte aus der Oberfläche abzulegen, bzw. zu schreiben. Beim Zugriff darauf (per Vecout) kommt folgende Meldung:
Main.cpp
...Form1.h(607) : error C2065: 'PP': nichtdeklarierter Bezeichner
...Form1.h(607) : error C2228: Links von ".Vecout" muss sich eine Klasse/Struktur/Union befinden.
Typ ist ''unknown-type''Der Zugriff erfolgt so:
PP.Vecout(Schritte_X,Schritte_Y,0);Das Objekt wird unter main angelegt.
ParallelPort PP;Könnt Ihr mir sagen, was ich falsch mache, bzw. wie es richtig geht?
Danke,
micmac78
-
Wie solls auch gehen?
So wie ich's verstanden hab, legst du ausserhalb deiner Klasse eine Variable an.
Natürlich ist die in der Klasse nicht bekannt.1. Möglichkeit: Gib deiner Klasse z. B. im Konstruktor die Variable mit und hinterleg sie in einer Membervariable
2. Möglichkeit: Mach die benötigte Variable global.
3. Möglichkeit: Im Fall vom Parallelport könnt ich mir vorstellen, dass es eh nur
ein Objekt von ParallelPort gibt => mach einen Singleton draus.
-
Hallo,
nochmal zu Verständnis.
Die Membervariablen in der angesprochenen Klasse ParallelPort sind public und werden im Konstruktor initial gesetzt.
Das Klassenobjekt wird im Hauptprogramm erstellt:
int main(array<System::String ^> ^args)
{
// Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);Parallelport PP;
// Hauptfenster erstellen und ausführen
Application::Run(gcnew Form1());return 0;
}In der Handlerfunktion zum Button wird das Klassenobjekt jedoch nicht erkannt. Damit kann ich auch nicht auf die Membervariablen des Klassenobjekts zugreifen:
Hier die Handlerfunktion:
private: System::Void bt_Vektorfahrt_Click(System::Object^ sender, System::EventArgs^ e) {
Schritte_X = Convert::ToInt32(this->tB_schritteX->Text); // wert textfeld1
Schritte_Y = Convert::ToInt32(this->tB_schritteY->Text); // wert textfeld2PP.Vecout(Schritte_X,Schritte_Y,0); //zeile 607, hier entsteht der Fehler
}Fehlermeldung:
...Form1.h(607) : error C2065: 'PP': nichtdeklarierter Bezeichner
...Form1.h(607) : error C2228: Links von ".Vecout" muss sich eine Klasse/Struktur/Union befinden.
Typ ist ''unknown-type''Vielleicht wirds jetzt klarer!
Dank und Gruß,
micmac78
-
Versuch in der main mal folgendes:
Parallelport PP = gcnew Parallelport;
oder du lässt das
Parallelport PP;
in der main so stehen, und schreibst dann in deinem Event:
PP = gcnew Parallelport;
Glaube, dann sollte es klappen.
-
NewtonsLaw schrieb:
Versuch in der main mal folgendes:
Parallelport PP = gcnew Parallelport;
Hier entsteht die Fehlermeldung:
error C2440: 'Initialisierung': 'NS_ParallelPort::ParallelPort *' kann nicht in 'NS_ParallelPort::ParallelPort' konvertiert werden
oder du lässt das
Parallelport PP;
in der main so stehen, und schreibst dann in deinem Event:
PP = gcnew Parallelport;
Hier ensteht die Fehlermeldung:
...Form1.h(612) : error C2065: 'PP': nichtdeklarierter Bezeichner ...Form1.h(612) : error C2726: "gcnew" kann nur zum Erstellen eines Objekts mit verwaltetem Typ verwendet werden.
Glaube, dann sollte es klappen.
Ich bleibe dran! Dennoch Danke für den Tip!