Veröffentlicht 20. März 200322 j 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:
21. März 200322 j 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.
21. August 200322 j 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.
21. August 200322 j 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
22. August 200322 j 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.
22. August 200322 j 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
22. August 200322 j 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.
22. August 200322 j 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
22. August 200322 j 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
22. August 200322 j 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
25. August 200322 j Ist nicht mehr nötig. Ich hatte vergessen in der Laufwerke.h-Datei die Dialogklasse einzutragen. Jetzt geht es. Vielen Dank.
26. August 200322 j 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?
26. August 200322 j 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.
26. August 200322 j 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.
27. August 200322 j 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.
27. August 200322 j 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
28. August 200322 j 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?
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.