Kampfkartoffel Geschrieben 7. Mai 2006 Autor Geschrieben 7. Mai 2006 Ich habe weiterhin das Problem, dass sobald ich die Data.h vor oder in der/die Programm2.h include ich die Fehler bekomme: error C2065: 'IDD_DIALOG1' : nichtdeklarierter Bezeichner //IDD_DIALOG1 ist der PseudoDialog der Datenklasse, den ich angelegt habe error C2057: Konstanter Ausdruck erwartet //bezieht sich auf dieselbe Zeile im Programm Beide Fehlermeldungen beziehen sich auf: public: CData(CWnd* pParent = NULL); // Standardkonstruktor // Dialogfelddaten //{{AFX_DATA(CData) ==> enum { IDD = IDD_DIALOG1 }; // HINWEIS: Der Klassen-Assistent fügt hier Datenelemente ein //}}AFX_DATA Kann es sein, dass es ein Problem ist, die Datenklasse als Basisklasse von CDialog zu nehmen? mein Code (Zur Info): Programm2.h #include "Data.h" #if !defined(AFX_PROGRAMM2_H__199936CB_F941_48C9_8013_8CC5B5E81F2F__INCLUDED_) #define AFX_PROGRAMM2_H__199936CB_F941_48C9_8013_8CC5B5E81F2F__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #ifndef __AFXWIN_H__ #error include 'stdafx.h' before including this file for PCH #endif #include "resource.h" // Hauptsymbole class CProgramm2App : public CWinApp { public: CProgramm2App(); CData mData; ... Programm2.cpp #include "stdafx.h" #include "Programm2.h" #include "Parent.h" //PropertySheet #include "Programm2Dlg.h" //PropertyPage #include "Dialog2.h" //PropertyPage ... Data.cpp #include "stdafx.h" #include "Programm2.h" #include "Data.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ... und so sehen dann die Pages aus: z.B. Dialog1: #include "stdafx.h" #include "Programm2.h" #include "Programm2Dlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ... Kannst daran Du sehen, warum diese Fehlermeldung kommt? 2. Wenn ich mich nun in der PropertyPageklasse CProgramm2Dlg befinde, wie genau sage ich dann dem Pointer auf die Hauptklasse(CProgramm2App *Bezug), dass er sich die Adresse aus der Variable der Datenklasse nehmen soll (CData Daten;) , die in der Hauptklasse deklariert wurde? Das ist wahrscheinlich ziemlich simpel, weswegen Du es nicht weiter erwähnst, aber ich habe wirklich zur Zeit keine Ahnung wie ich das basteln soll. Gruß KK Zitieren
Klotzkopp Geschrieben 7. Mai 2006 Geschrieben 7. Mai 2006 Kann es sein, dass es ein Problem ist, die Datenklasse als Basisklasse von CDialog zu nehmen?Warum ist deine Datenklasse überhaupt von CDialog abgeleitet? Ist deine Datenklasse ein Dialog? Falls nicht, ist das ein Designfehler. error C2065: 'IDD_DIALOG1' : nichtdeklarierter Bezeichner Füg in der Datei, in der dieser Fehler gemeldet wird, hinter der Includedirektive für stdafx.h folgendes ein: #include "resource.h" 2. Wenn ich mich nun in der PropertyPageklasse CProgramm2Dlg befinde, wie genau sage ich dann dem Pointer auf die Hauptklasse(CProgramm2App *Bezug), dass er sich die Adresse aus der Variable der Datenklasse nehmen soll (CData Daten;) , die in der Hauptklasse deklariert wurde?Falscher Ansatz. Bringen, nicht holen. Schreib deinen Code von dort aus, wo du die Daten hast, nicht von dort, wo du sie brauchst. Das ist doch offenbar ein Teil aus der InitInstance-Methode der App-Klasse: CProgramm2Dlg Dialog1; CDialog2 Dialog2; CParent ParentSheet("Test"); ParentSheet.AddPage(&Dialog1); ParentSheet.AddPage(&Dialog2); m_pMainWnd = &ParentSheet; int nResponse = ParentSheet.DoModal(); if (nResponse == IDOK)[/code] Hier erzeugst du die Propertypages, die den Zeiger auf die Instanz der Datenklasse brauchen. Hier ist der richtige Punkt, um anzusetzen: [code] CProgramm2Dlg Dialog1; CDialog2 Dialog2; [b]Dialog1.m_pData = &Daten; Dialog2.m_pData = &Daten; // oder wie die Variablen bei dir heißen[/b] CParent ParentSheet("Test"); ParentSheet.AddPage(&Dialog1); ParentSheet.AddPage(&Dialog2); m_pMainWnd = &ParentSheet; int nResponse = ParentSheet.DoModal(); if (nResponse == IDOK) Zitieren
Kampfkartoffel Geschrieben 7. Mai 2006 Autor Geschrieben 7. Mai 2006 ES LÄUFT, ich danke Dir recht herzlich, Holzkopp, für Dein Engagement und Dein Interesse an meinem Problem. Endlich habe ich eine Lösung für mein Problem und die Art der Lösung hat mein Verständnis stark erweitert. Wenn mal Votings für Moderatoren stattfinden, sag mir Bescheid, meine Stimme hast Du! PS: Ja das mit dem Dialog ist ein Designfehler, ich war halt nur mit der Dialog-Klasse am vertrautesten und wählte deswegen diese. Kennst Du irgendeine MFC-Standardklasse mit der man meine Datenklasse einfacher erstellen kann? Gruß und herzlichen Dank KK Zitieren
Klotzkopp Geschrieben 8. Mai 2006 Geschrieben 8. Mai 2006 ich danke Dir recht herzlich, Holzkopp,Ich glaube, ich kann froh sein, dass du meinen Namen zumindest einmal richtig geschrieben hast Kennst Du irgendeine MFC-Standardklasse mit der man meine Datenklasse einfacher erstellen kann? Wenn sie nur als Container für die Daten dient, sollte die Klasse eigentlich von gar keiner anderen Klasse abgeleitet sein. 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.