Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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:

Geschrieben

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.

  • 5 Monate später...
Geschrieben

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.

Geschrieben

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

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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?

Geschrieben

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.

Geschrieben

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.

Geschrieben
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

Geschrieben

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?

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...