Grundsatzfrage: Header / CPP



  • Hallo und guten Morgen,

    ich habe eine grundsätzliche Frage zum..ja wie nennt man das überhaupt??
    ableiten(?) einer bestehenden Klasse.

    Ich habe einem Dialog eine Klasse mit dem Namen "Haus" zugeordnet.
    Haus ist vom Typ CDialog.

    Nun muss ich CDialog aber durch CWasneues ersetzen.

    Header vor Ableiten auf CWasneues:

    #pragma once
    
    // Haus-Dialogfeld
    
    class Haus : public CDialog
    {
    	DECLARE_DYNAMIC(Haus)
    
    public:
    	Haus(CWnd* pParent = NULL);   // Standardkonstruktor
    	virtual ~Haus();
    
    // Dialogfelddaten
    	enum { IDD = IDD_DIALOG1 };
    
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
    
    	DECLARE_MESSAGE_MAP()
    };
    

    Nun war mein Gedanke man tauscht wie folgt einfach CDialog gegen CWasneues aus:

    #pragma once
    
    // Haus-Dialogfeld
    
    class Haus : public CWasneues
    {
    	DECLARE_DYNAMIC(Haus)
    
    public:
    	Haus(CWnd* pParent = NULL);   // Standardkonstruktor
    	virtual ~Haus();
    
    // Dialogfelddaten
    	enum { IDD = IDD_DIALOG1 };
    
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
    
    	DECLARE_MESSAGE_MAP()
    };
    

    in der .cpp würde es vor der Änderung dann so aussehen:

    // Haus.cpp : Implementierungsdatei
    //
    
    #include "stdafx.h"
    #include "Testanwendung.h"
    #include "Haus.h"
    
    // Haus-Dialogfeld
    
    IMPLEMENT_DYNAMIC(Haus, CDialog)
    Haus::Haus(CWnd* pParent /*=NULL*/)
    	: CDialog(Haus::IDD, pParent)
    {
    }
    
    Haus::~Haus()
    {
    }
    
    void Haus::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(Haus, CDialog)
    END_MESSAGE_MAP()
    
    // Haus-Meldungshandler
    

    Und wenn ich CWasneues statt CDialog einsetzen will dann so:

    // Haus.cpp : Implementierungsdatei
    //
    
    #include "stdafx.h"
    #include "Testanwendung.h"
    #include "Haus.h"
    
    // Haus-Dialogfeld
    
    IMPLEMENT_DYNAMIC(Haus, CWasNeues)
    Haus::Haus(CWnd* pParent /*=NULL*/)
    	: CWasneues(Haus::IDD, pParent)
    {
    }
    
    Haus::~Haus()
    {
    }
    
    void Haus::DoDataExchange(CDataExchange* pDX)
    {
    	CWasneues::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(Haus, CWasneues)
    END_MESSAGE_MAP()
    
    // Haus-Meldungshandler
    

    Ich erhalte nach dem Kompilieren jedoch folgende Meldung für "haus.h":
    error C2504: 'CWasneues': Basisklasse undefiniert

    Sowie haufenweise weitere Fehlermeldungen in diesem Zusammenhang.
    CWasneues ist dem Projekt als CWasneues.h/.cpp auch hinzugefügt worden.

    Vielleicht kann jemand helfen. Evtl. finde ich ja auch schon vorab
    de Lösung in meinem Anfängerbuch zum Thema Klassen. Wobei ich glaube,
    dass dieser Fall oder was ähnliches da nicht behandelt wird. Mal sehen!


  • Mod

    Warum möchtest Du das?

    Das würde nur gehen, wenn CWasneues auch von CDialog abgeleitet ist!
    Sicher muss aber dann auch Cwasneues in dieser Klasse Haus auch bekannt sein. D.h. die entsprechenden Header müssen hier eingefügt werden.



  • Es geht mir um das Sample hier ➡
    http://www.codeproject.com/dialog/SlidingDialog.asp

    Ich wollte das mal grundsätzlich verstehen was da gemacht wird,
    da zwar das Beispiel bei mir läuft, ich aber es selbst nicht anhand
    der dort beschriebenen Anleitung zum laufen bekomme.


  • Mod

    Du musst die Basisklasse überall ersetzen, wie Du es gemacht hast. Darfst aber eben nicht vergessen die Header der neuen Klasse einzufügen.



  • Danke hat geklappt.


Anmelden zum Antworten