Vereben bei Dialogen



  • Wie kann ich den einen Dialog von einem anderen erben lassen?

    class CDlgServiceCall : public CDolmetscherDlg
    {
    // Construction
    public:
    	void ConfirmServiceCall(int DeskID, int side);
    	CDlgServiceCall(CWnd* pParent = NULL);   // standard constructor
    
    // Dialog Data
    	//{{AFX_DATA(CDlgServiceCall)
    	enum { IDD = IDD_DIALOG_ServiceCall };
    		// NOTE: the ClassWizard will add data members here
    	//}}AFX_DATA
    .
    .
    .
    

    ich krieg da tausende (25!) Fehler!!!
    Das liegt doch bestimmt an den includes und den Headern ! oder?



  • erstens: Fehlermeldungen sind hilfreich, also mit posten

    zweitens:

    void ConfirmServiceCall(int DeskID, int side);
    

    mach man das void da mal weg, is schließlich ein Konstruktor

    drittens: erstell dir doch mal nen Dialog mit dem Assistenten und schau dir die erstelle Klasse an, dann weist du wie deine aussehen muss vom Prinzip her



  • monne81 schrieb:

    Wie kann ich den einen Dialog von einem anderen erben lassen?

    Warum willst du einen Dialog von einem anderen erben lassen? Code Reuse?

    Das liegt doch bestimmt an den includes und den Headern ! oder?

    Kommt drauf an. Für die Fehlerdiagnose ist es von enormer Wichtigkeit, dass du die Fehlermeldungen nicht für dich behältst (tm).



  • also gut Ihr wolltet Fehler ?Ihr bekommt Fehler!!!

    c:\dokumente und einstellungen\e-labor\eigene dateien\projekt sis\dolmetscher\dlgservicecall.h(16) : error C2504: 'CDolmetscherDlg' : base class undefined
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(22) : error C2614: 'CDlgServiceCall' : illegal member initialization: 'CDialog' is not a base or member
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(31) : error C2248: 'DoDataExchange' : cannot access protected member declared in class 'CWnd'
            c:\programme\windows ce tools\wce500\netdcu8\mfc\include\afxwin.h(2412) : see declaration of 'DoDataExchange'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(31) : error C2352: 'CWnd::DoDataExchange' : illegal call of non-static member function
            c:\programme\windows ce tools\wce500\netdcu8\mfc\include\afxwin.h(2412) : see declaration of 'DoDataExchange'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(38) : error C2248: 'messageMap' : cannot access protected member declared in class 'CDialog'
            c:\programme\windows ce tools\wce500\netdcu8\mfc\include\afxwin.h(2683) : see declaration of 'messageMap'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(77) : error C2248: 'OnCtlColor' : cannot access protected member declared in class 'CDialog'
            c:\programme\windows ce tools\wce500\netdcu8\mfc\include\afxwin.h(2681) : see declaration of 'OnCtlColor'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(77) : error C2352: 'CDialog::OnCtlColor' : illegal call of non-static member function
            c:\programme\windows ce tools\wce500\netdcu8\mfc\include\afxwin.h(2681) : see declaration of 'OnCtlColor'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(314) : error C2352: 'CDialog::OnInitDialog' : illegal call of non-static member function
            c:\programme\windows ce tools\wce500\netdcu8\mfc\include\afxwin.h(2625) : see declaration of 'OnInitDialog'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(354) : error C2664: 'CPaintDC::CPaintDC' : cannot convert parameter 1 from 'class CDlgServiceCall *const ' to 'class CWnd *'
            Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(366) : error C2065: 'wndTop' : undeclared identifier
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(379) : warning C4244: 'argument' : conversion from 'double' to 'int', possible loss of data
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(415) : error C2352: 'CWnd::UpdateWindow' : illegal call of non-static member function
            c:\programme\windows ce tools\wce500\netdcu8\mfc\include\afxwin.h(2064) : see declaration of 'UpdateWindow'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(424) : error C2660: 'ShowWindow' : function does not take 1 parameters
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(442) : error C2660: 'ShowWindow' : function does not take 1 parameters
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(448) : error C2660: 'ShowWindow' : function does not take 1 parameters
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(457) : error C2660: 'RedrawWindow' : function does not take 3 parameters
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(464) : error C2660: 'ShowWindow' : function does not take 1 parameters
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DlgServiceCall.cpp(477) : error C2660: 'ShowWindow' : function does not take 1 parameters
    Dolmetscher.cpp
    c:\dokumente und einstellungen\e-labor\eigene dateien\projekt sis\dolmetscher\dlgservicecall.h(16) : error C2504: 'CDolmetscherDlg' : base class undefined
    DolmetscherDlg.cpp
    c:\dokumente und einstellungen\e-labor\eigene dateien\projekt sis\dolmetscher\dlgservicecall.h(16) : error C2504: 'CDolmetscherDlg' : base class undefined
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DolmetscherDlg.cpp(127) : error C2039: 'Create' : is not a member of 'CDlgServiceCall'
            c:\dokumente und einstellungen\e-labor\eigene dateien\projekt sis\dolmetscher\dlgservicecall.h(15) : see declaration of 'CDlgServiceCall'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DolmetscherDlg.cpp(129) : error C2039: 'm_hWnd' : is not a member of 'CDlgServiceCall'
            c:\dokumente und einstellungen\e-labor\eigene dateien\projekt sis\dolmetscher\dlgservicecall.h(15) : see declaration of 'CDlgServiceCall'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DolmetscherDlg.cpp(291) : error C2039: 'ShowWindow' : is not a member of 'CDlgServiceCall'
            c:\dokumente und einstellungen\e-labor\eigene dateien\projekt sis\dolmetscher\dlgservicecall.h(15) : see declaration of 'CDlgServiceCall'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DolmetscherDlg.cpp(297) : error C2039: 'ShowWindow' : is not a member of 'CDlgServiceCall'
            c:\dokumente und einstellungen\e-labor\eigene dateien\projekt sis\dolmetscher\dlgservicecall.h(15) : see declaration of 'CDlgServiceCall'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DolmetscherDlg.cpp(306) : error C2039: 'ShowWindow' : is not a member of 'CDlgServiceCall'
            c:\dokumente und einstellungen\e-labor\eigene dateien\projekt sis\dolmetscher\dlgservicecall.h(15) : see declaration of 'CDlgServiceCall'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DolmetscherDlg.cpp(312) : error C2039: 'ShowWindow' : is not a member of 'CDlgServiceCall'
            c:\dokumente und einstellungen\e-labor\eigene dateien\projekt sis\dolmetscher\dlgservicecall.h(15) : see declaration of 'CDlgServiceCall'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DolmetscherDlg.cpp(348) : warning C4244: 'argument' : conversion from 'double' to 'int', possible loss of data
    Generating Code...
    Error executing clarm.exe.
    Creating browse info file...
    
    Dolmetscher.exe - 25 error(s), 2 warning(s)
    

    😃

    Warum ich vererben will?

    Na ja ich habe ein paar Methoden die in allen Dialogen gleich sind
    z.B. Datums und Uhrzeitanzeigen, Com-Port Sende- Methoden usw.

    oder mein Hauptdialog hat einen Handle auf einen Com- Port und diesen möchte ich auch in den anderen Dialogen haben.



  • monne81 schrieb:

    error C2504: 'CDolmetscherDlg' : base class undefined

    Die Deklaration der Basisklasse muss verfügbar sein. Du musst die Headerdatei, in der CDolmetscherDlg deklariert ist, einbinden.

    Warum ich vererben will?

    Na ja ich habe ein paar Methoden die in allen Dialogen gleich sind
    z.B. Datums und Uhrzeitanzeigen, Com-Port Sende- Methoden usw.

    Vererbung ist nicht für Codewiederverwendung gedacht. Wenn du diese Methoden auch in einer anderen Klasse gebrauchen kannst, sollten sie keine Member der ersten Klasse sein.



  • base class undefined

    Include vergessen!



  • MFK schrieb:

    Warum ich vererben will?

    Na ja ich habe ein paar Methoden die in allen Dialogen gleich sind
    z.B. Datums und Uhrzeitanzeigen, Com-Port Sende- Methoden usw.

    Vererbung ist nicht für Codewiederverwendung gedacht. Wenn du diese Methoden auch in einer anderen Klasse gebrauchen kannst, sollten sie keine Member der ersten Klasse sein.

    Sondern? 😕



  • Ich verweis mal auf Scott Meyers und den Unterschied zw. public und private Vererbung 🙂

    Grundsätzlich ist gegen Vererbung auch bei Dialogen nichhts zusagen, denke aber an die IST-EIN-Beziehung, ob die hinhaut, wenn nicht sollte es entweder private-vererbnung werden, oder evtl auch Mehrfachvererbung, kommt auf deinen Kontext drauf an, den du hast.



  • estartu_de schrieb:

    Sondern? 😕

    Vererbung soll Verwandschaftsbeziehungen abbilden. Wenn man Vererbung benutzt, nur weil die Basisklasse eine nützliche Memberfunktion beinhaltet, und Vererbung der einfachste Weg ist, an diese Methode heranzukommen, dann versaut man sich damit IMHO sein Design.



  • auch wenn ich die Include einbinde kommen die Fehler:

    / DlgServiceCall.h : header file
    //
    #include "DolmetscherDlg.h" 
    /////////////////////////////////////////////////////////////////////////////
    // CDlgServiceCall dialog
    
    class CDlgServiceCall : public CDolmetscherDlg
    {
    // Construction
    public:
    	void ConfirmServiceCall(int DeskID, int side);
    	CDlgServiceCall(CWnd* pParent = NULL);   // standard constructor
    
    // Dialog Data
    	//{{AFX_DATA(CDlgServiceCall)
    	enum { IDD = IDD_DIALOG_ServiceCall };
    		// NOTE: the ClassWizard will add data members here
    	//}}AFX_DATA
    

    Fehler:

    :\dokumente und einstellungen\e-labor\eigene dateien\projekt sis\dolmetscher\dlgservicecall.h(16) : error C2504: 'CDolmetscherDlg' : base class undefined
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DolmetscherDlg.cpp(127) : error C2039: 'Create' : is not a member of 'CDlgServiceCall'
            c:\dokumente und einstellungen\e-labor\eigene dateien\projekt sis\dolmetscher\dlgservicecall.h(15) : see declaration of 'CDlgServiceCall'
    C:\Dokumente und Einstellungen\E-Labor\Eigene Dateien\Projekt SIS\Dolmetscher\DolmetscherDlg.cpp(129) : error C2039: 'm_hWnd' : is not a member of 'CDlgServiceCall'
            c:\dokumente und einstellungen\e-labor\eigene dateien\projekt sis\dolmetscher\dlgservicecall.h(15) : see declaration of 'CDlgServiceCall'
    .
    .
    .
    

    ich glaub ich lass das auch mir dem vererben. mein Programm funktioniert auch so... 🕶



  • Com-Port Sende- Methoden

    Klingt nicht danach als ob das speziell was mit Dialogen zu tun hat. Da solltest du überlegen extra Klassen einzuführen.



  • Dann habe ich also ein versautes Design. 😕
    Komisch, mir wurde gerade Vererbung dafür als sinnvoll erklärt. Ich komme damit auch super zurecht.

    Vielleicht gibt es da wieder zwei Wege - und jeder für sich ist okay. Treffen sie aufeinander, knallt es. 😉



  • Wenns nur drum geht bestimmte Funktionen in mehreren Dialogen verfügbar zu machen müsste das doch auch per Interface gehen !?


Anmelden zum Antworten