Alias Geschrieben 20. März 2003 Geschrieben 20. März 2003 Ich habe mehrere Dialoge bzw. mehrere Klassen, wenn ich jetzt in einen neuen Dialog springe möchte ich vom vorherigen Werte verwenden so zu sagen, ich brauche die Werte von der anderen Klasse :confused: Zitieren
Guybrush Threepwood Geschrieben 21. März 2003 Geschrieben 21. März 2003 Sind die Variablen in den Klassen private deklariert? Wenn nicht mußt du doch nur beim schließen des einen Dialogs die entsprechenden Werte den Variablen des anderen Objekts zuweisen. Wenn sie private deklariert sind brauchst du in der entsprechenden Klasse halt ne extr Funktion die die Werte zuweist. Zitieren
Narf! Geschrieben 21. August 2003 Geschrieben 21. August 2003 Genau vor diesem Problem stehe ich auch. Ich habe zwei Klassen: 1. Dialog-Klasse mit zwei Komboboxen; ruft die zweite Klasse auf: Laufwerke LW; LW.Erkennen(); 2. Laufwerke-Klasse diese erkennt die Laufwerke und soll sie in die Komboboxen der 1. Klasse eintragen: CCD_CopyDlg CDC; CDDrive=szDrive; CDC.m_ctlCD.AddString(CDDrive); //Zu Auswahl CD-ROM hinzufügen ... ZLW=szDrive; CDC.m_ctlZLW.AddString(ZLW); //Zur Auswahl Ziel hinzufügen Bei der Übergabe wird das Programm mit einem Fehlerfenster abgebrochen: "Debug Assertion Failed! ... File: afxwin2.inl Line: 735" Wenn ich es ignoriere, läuft das Programm bis zur nächsten Übergabe weiter. Am Ende stehen keine Werte in der Kombobox. Zitieren
Goos Geschrieben 21. August 2003 Geschrieben 21. August 2003 Hi Narf! das kann so ja auch nicht gehn Du erzeugst ja, wenn ich das richtig deute, in deiner Laufwerks-Klasse eine neue Instanz deiner Dialogklasse. Wenn du an die dann die Werte uebergibst ists schon klar, dass die im urspruenglichen Dialog nicht auftauchen. Du solltest deinem Laufwerks-Objekt vielleicht noch nen Pointer auf deinen Dialog mitgeben. Goos Zitieren
Narf! Geschrieben 22. August 2003 Geschrieben 22. August 2003 Und wie geht das? Ich habe noch nicht so viel Erfahrung mit OOP. Habe bis jetzt alle Funktionen in die Dialogklasse geschrieben, aber man lernt ja immer dazu. Zitieren
Goos Geschrieben 22. August 2003 Geschrieben 22. August 2003 Du brauchst fuer deine Laufwerksklasse einen Konstruktor ueber den du einen Pointer deiner Dialogklasse uebergeben kannst. Den kannst du dann in einer entsprechenden Membervariable der Laufwerksklasse halten und hast somit den Zugriff auf deinen Dialog. Wenn dus noch konkreter wissen magst, dann musst erstmal noch entsprechende Stuecke von deinem Code posten und vielleicht auch noch schreiben womit du entwickelst. Goos Zitieren
Narf! Geschrieben 22. August 2003 Geschrieben 22. August 2003 Ich entwickle mit VC++ 6.0. Einen Konstruktor Laufwerke.Laufwerke() habe ich ist aber leer. Bei OnInitDialog rufe ich die Laufwerkklasse auf, um die Laufwerkbuchstaben zu ermitteln. Zitieren
Goos Geschrieben 22. August 2003 Geschrieben 22. August 2003 Ok dann aender mal deinen Konstruktor ab. Laufwerke::Laufwerke(CCD_CopyDlg *CDC) //wobei ich mal annehme, dass CCD_CopyDlg deine Dialogklasse ist und dann legst du halt noch ne Membervariable in Laufwerke an. CCD_CopyDlg *m_pCDC; und im Konsturktor kannst dann den Pointer auf deinen Dialog an deine Membervariable uebergeben. m_pCDC = CDC; danach kannst du dann in deiner Laufwerksklasse ueber m_pCDC auf deinen Dialog zugreifen. Im Dialog musst dein Objekt dann natuerlich instanziieren mit Laufwerke LW(this); Goos Zitieren
Narf! Geschrieben 22. August 2003 Geschrieben 22. August 2003 Ich erhalte in der Dialogklasse bei Laufwerke LW(this) diese Fehlermeldung: E:\Projekte VC++\CD_Copy\CD_CopyDlg.cpp(59) : error C2664: '__thiscall Laufwerke::Laufwerke(const class Laufwerke &)' : Konvertierung des Parameters 1 von 'class CCD_CopyDlg *const ' in 'const class Laufwerke &' nicht moeglich Ursache: Konvertierung von 'class CCD_CopyDlg *const ' in 'const class Laufwerke' nicht moeglich Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Ueberladungsaufloesung des Konstruktors ist mehrdeutig Zitieren
Goos Geschrieben 22. August 2003 Geschrieben 22. August 2003 Dann hast du im Konstruktor von deiner Laufwerksklasse den Typ Laufwerke drinstehen und nicht deine Dialogklasse: ...in der Not poste halt mal die Deklaration deiner Laufwerksklasse. Goos Zitieren
Narf! Geschrieben 25. August 2003 Geschrieben 25. August 2003 Ist nicht mehr nötig. Ich hatte vergessen in der Laufwerke.h-Datei die Dialogklasse einzutragen. Jetzt geht es. Vielen Dank. Zitieren
Narf! Geschrieben 26. August 2003 Geschrieben 26. August 2003 Nächstes Problem: Eine Klasse greift auf Variablen aus drei anderen Klassen zu. Also habe ich in den Konstruktor der Klasse geschrieben Klasse_A::Konstruktor(Klasse1 *k1, Klasse2 *k2, Klasse *k3) { Habe auch drei Membervariablen. } Inhalt Klasse1: OnInitDlg() { Klasse_A kla(this); } Fehlermeldung: Klasse_A akzeptiert keine 1 Parameter. Was nun? Zitieren
Guybrush Threepwood Geschrieben 26. August 2003 Geschrieben 26. August 2003 Ich weiß zwar nicht warum du das so umständlich löst, aber ich kenne dein Programm ja auch nicht... Du brauchst, für das was du vor hast, doch in der Klasse_A nur jeweils einen Konstruktor der nur einen Parameter (von der entsprechenden Klasse) erwartet. Zitieren
Narf! Geschrieben 26. August 2003 Geschrieben 26. August 2003 Naja, sicher ein Anfängerfehler. Ich habe das jetzt so gemacht, dass die aufgerufene Funktion einer anderen Klasse diesen Pointer enthält, wenn diese auf Werte der aufrufenden Klasse zugreift. Im Moment funktioniert es noch. Zitieren
Narf! Geschrieben 27. August 2003 Geschrieben 27. August 2003 Und schon ist es wieder vorbei. Nun habe ich mir folgendes gedacht: Klasse_A ruft eine Methode in Klasse_B auf. Nun könnte ich doch in der Klasse_A schreiben: Klasse_B *kb und dann mit kb->Methode() aufrufen, die dann in Klasse_B einer Variablen einen Wert zuweist und so auch auf die Variable zugreifen. Zitieren
Goos Geschrieben 27. August 2003 Geschrieben 27. August 2003 Original geschrieben von Narf! Und schon ist es wieder vorbei. Nun habe ich mir folgendes gedacht: Klasse_A ruft eine Methode in Klasse_B auf. Nun könnte ich doch in der Klasse_A schreiben: Klasse_B *kb und dann mit kb->Methode() aufrufen, die dann in Klasse_B einer Variablen einen Wert zuweist und so auch auf die Variable zugreifen. Jo wenn du zwischen dem Klasse_b *kb und dem kb->Methode() nicht das kb = new Klasse_b vergisst. Goos Zitieren
Narf! Geschrieben 28. August 2003 Geschrieben 28. August 2003 Jetzt habe ich folgendes vor, um auf eine andere Klasse zuzugreifen: #include "Klasse_B.h" Klasse_A::Methode() { Klasse_B *kb; kb->Methode2(); //bzw. kb->Variable; //mit Inhalt aus Klasse_B } Ich möchte damit erreichen, dass ich nur bei Bedarf auf die andere Klasse zugreife. Bin ich jetzt auf dem richtigen Weg? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.