Parameter Übergabe zwischen zwei Klassen
-
So???
CClass1* pClass1 = new CClass1; // Pointer auf meine erste Klasse
CClass2 instanz_class2 = new CClass2; // Instanz meiner zweiten KLasseinstanz_class2.SetVars( pClass1 ); // Übergabe Pointer auf erste Klasse
// an Funktion SetVars von zweite KLasse
-
Mensch Cassimus zeig doch mal ein bisschen mehr CODE !
-
Das ist die Funktion aus meiner ersten KLasse :
void CNewTermEmuDlg::OnButton2()
{
CNewTermEmuDlg * pCNewTermEmuDlg = new CNewTermEmuDlg;
COnlinezeitpunkt test = new COnlinezeitpunkt;test.SetVars( pCNewTermEmuDlg );
m_ozp.Create(IDD_OZP_DLG,NULL);
m_ozp.ShowWindow(SW_SHOW);
m_ozp.SetWindowPos(NULL, 841, 254, 225, 488, SWP_NOZORDER);
}Ich möchte hier in dieser Funktion verschiedene Editfelder aus der zeiten Klasse
(Dialogfeld) belegen und dann anzeigen lassen.
Und mit dieser Funktion aus der zweiten Klasse will ich die Variablen
annehmen und in den Editfeldern ausgeben...void COnlinezeitpunkt::SetVars(class CNewTermEmuDlg * p)
{display_ozp01.SetWindowText( p->ozp01 ); // ozp01 ist variable aus klasse1
display_ozp02.SetWindowText( p->ozp02 ); //
display_ozp03.SetWindowText( p->ozp03 ); // display_ozp0x ist cedit aus klasse2
display_ozp04.SetWindowText( p->ozp04 ); // in dem ich den wert der übergebenen
display_ozp05.SetWindowText( p->ozp05 ); // variablen ausgeben will
display_ozp06.SetWindowText( p->ozp06 );
display_ozp07.SetWindowText( p->ozp07 );
display_ozp08.SetWindowText( p->ozp08 );
display_ozp09.SetWindowText( p->ozp09 );}
Ich hoffe mein Problem ist jetzt irgendwie verständlich geworden...
-
ist alles ok. nur du musst um den wert zu erhalten, nicht eine neue Instanz anlegen,
sondern du übergibtst den this zeiger an die Funktion.Devil
-
Habs jetzt so probiert...
void CNewTermEmuDlg::OnButton2()
{
ozp01 = "123;
ozp02 = "111";
ozp03 = "222";
ozp04 = "333";
ozp05 = "484";
ozp06 = "665";
ozp07 = "444";
ozp08 = "333";
ozp09 = "666";CNewTermEmuDlg * jetzt = new CNewTermEmuDlg;
COnlinezeitpunkt test2 = new COnlinezeitpunkt;
test2.SetVars( this );
}
...nun bekomme ich aber in der Funktion SetVars beim Befehl :display_ozp01.SetWindowText( p->ozp01 );
...die Fehlermeldung :
Debug Assertion Failed!
File: winocc.cpp
Line: 229Und dann Unknown Software Exception...
Was mach ich falsch??
-
Also ich würde dir folgendes Vorschlagen.
In deiner Klasse, die die Variablen anzeigen sollen definierst du Global ein LPVOID m_pKlasse.
Jetzt fügst du folgende Zeile in den Konstruktor dieser Klasse ein.
m_pKlasse = NULL;Bevor der Dialog angezeigt werden soll übergibst du den Pointer der Klasse die die Daten enthält wie folgt !
Entweder
p.m_pKlasse = x;
oder
p.m_pKlasse = this;
oder du schreibst dir wieder eine Funktion.Nun rufst du zum Beispiel DoModal() des Dialoges auf der angezeigt werden soll !
In die Funktion OnInitDialog dieses Dialoges greifst du nun auf m_pKlasse zu und zwar wie folgt !
KlassenName* m_pKlassenInstanz = (KlassenName*)m_pKlasse
KlassenName = Name der Klasse die die Variablen enthält !so und nun kannst du deine EditFelder mit SetWindow füllen.
Dazu benutzt du m_pKlassenInstanz->.... als Wert !Sollte jetzt eigentlich funktionieren und sauber sein !
[ Dieser Beitrag wurde am 02.12.2002 um 13:19 Uhr von DaDaywalker editiert. ]
-
Irgendwie will das hier alles nicht funktionieren,
nun hab ichs so gemacht :Klasse1
void CNewTermEmuDlg::OnButton2()
{
COnlinezeitpunkt test = new COnlinezeitpunkt;
test.m_pKlasse = this;m_ozp.DoModal();
}Klasse 2:
BOOL COnlinezeitpunkt::OnInitDialog()
{
CDialog::OnInitDialog();CNewTermEmuDlg * testinstanz = (CNewTermEmuDlg)m_pKlasse;
return TRUE;
}
--> ergibt Fehlermeldung :
error C2440: 'type cast' : 'void *' kann nicht in 'class CNewTermEmuDlg' konvertiert werden Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Ueberladungsaufloesung des Konstruktors ist mehrdeutigDas kann doch nicht so schwer sein...oder sollt ich doch besser Kindergärtner werden und mich dem Coden abwenden...
-
Original erstellt von Casimus:
**Irgendwie will das hier alles nicht funktionieren,
nun hab ichs so gemacht :Klasse1
void CNewTermEmuDlg::OnButton2()
{
COnlinezeitpunkt test = new COnlinezeitpunkt;
test.m_pKlasse = this;m_ozp.DoModal();
}Klasse 2:
BOOL COnlinezeitpunkt::OnInitDialog()
{
CDialog::OnInitDialog();CNewTermEmuDlg * testinstanz = (CNewTermEmuDlg)m_pKlasse;
return TRUE;
}
--> ergibt Fehlermeldung :
error C2440: 'type cast' : 'void *' kann nicht in 'class CNewTermEmuDlg' konvertiert werden Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Ueberladungsaufloesung des Konstruktors ist mehrdeutigDas kann doch nicht so schwer sein...oder sollt ich doch besser Kindergärtner werden und mich dem Coden abwenden...
**
Naja wie wäre es denn wenn du bei (CNewTermEmuDlg*)m_pKlasse hinschreiben würdest dann würde es funktionieren.
BOOL COnlinezeitpunkt::OnInitDialog()
{
CDialog::OnInitDialog();CNewTermEmuDlg * testinstanz = (CNewTermEmuDlg)m_pKlasse;
////////////////////////////////////////////////////////////////////////////
Du solltest noch überprüfen ob m_pKlasse nicht NULL ist.
if (m_pKlasse)
{ // jetzt felder belegen}
else
{
// Fehlermeldung z.B}
////////////////////////////////////////////////////////////////////////////
Hier müssen aber nun die Felder belegt werden denn ansonsten ist testinstanz
nicht mehr gültig !
////////////////////////////////////////////////////////////////////////////return TRUE;
}
-
Okay ich gebs auf...es will nicht klappen.
Dann muss ich mir was andres überlegen...
das Problem quasi umgehen...BIG THX 2 DaDaywalker & devil81
-
Mensch jung dat kann doch nicht so schwer sein schick mir mal das Projekt als zip gepackt dann schau ich mir das mal an !
-
Okay müsste da sein... :p
-
Lern doch erst mal C/C++ .........
-
Original erstellt von <->:
Lern doch erst mal C/C++ .........Das wäre wohl das beste...
Devil
-
He zu diesem Thema gibt es jede Menge in der datenbank
Versuche es mal unter Suchen
Andreas