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-MeldungshandlerUnd 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-MeldungshandlerIch erhalte nach dem Kompilieren jedoch folgende Meldung für "haus.h":
error C2504: 'CWasneues': Basisklasse undefiniertSowie 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!
-
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.aspIch 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.
-
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.