Richtig ableiten
-
Moin.
Ich habe in meinem Projekt eine von CListCtrl abgeleitete Klasse (CReportCtrl). Nun möchte ich von dieser eine weitere Klasse ableiten. Wie mache ich das?
Ich habe es so versucht: Über den Klassenassistenten eine weitere Klasse zum Projekt hinzugefügt. Da ich dort CReportCtrl nicht als Basisklasse auswählen konnte, habe ich CListCtrl ausgewählt.
Dann habe ich die neue Cpp- und Headerdatei wie folgt geändert:
Header:
#pragma once #include "ReportCtrl.h" // CMyListCtrl class CMyListCtrl : public CReportCtrl { DECLARE_DYNAMIC(CMyListCtrl) public: CMyListCtrl(); virtual ~CMyListCtrl(); protected: DECLARE_MESSAGE_MAP() };
Cpp:
// MyListCtrl.cpp: Implementierungsdatei // #include "stdafx.h" #include "Ableiten01.h" #include "MyListCtrl.h" // CMyListCtrl IMPLEMENT_DYNAMIC(CMyListCtrl, CReportCtrl) CMyListCtrl::CMyListCtrl() { } CMyListCtrl::~CMyListCtrl() { } BEGIN_MESSAGE_MAP(CMyListCtrl, CReportCtrl) END_MESSAGE_MAP() // CMyListCtrl-Meldungshandler
Beim Kompilieren kommt folgende Meldung:
1>.\MyListCtrl.cpp(11) : error C2039: 'classCReportCtrl': Ist kein Element von 'CReportCtrl'
1> d:\eigene dateien\visual studio 2008\projects\ableiten01\ReportCtrl.h(110): Siehe Deklaration von 'CReportCtrl'
1>.\MyListCtrl.cpp(11) : error C2065: 'classCReportCtrl': nichtdeklarierter BezeichnerWie mache ich es richtig?
-
Hallo,
DECLARE_DYNAMIC in CReportCtrl vergessen?
MfG,
Probe-Nutzer
-
Stimmt. Das war dort tatsächlich nicht vorhanden.
Nun habe ich es hinzugefügt, bekomme aber leider immer noch Meldungen beim linken welche ich nicht ganz deuten kann:
1>MyListCtrl.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: static struct CRuntimeClass const CReportCtrl::classCReportCtrl" (?classCReportCtrl@CReportCtrl@@2UCRuntimeClass@@B)".
1>ReportCtrl.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual struct CRuntimeClass * __cdecl CReportCtrl::GetRuntimeClass(void)const " (?GetRuntimeClass@CReportCtrl@@UBAPAUCRuntimeClass@@XZ)".
1>PicoMOD4 Core (ARMV4I)\Debug\Ableiten01.exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
-
Es ist genauer gesagt so, dass wenn ich die Deklaration wie folgt abändere:
... ... class CReportCtrl : public CListCtrl { DECLARE_DYNAMIC(CReportCtrl) // <-- hinzugefügt public: CReportCtrl(); virtual ~CReportCtrl(); ... ...
erhalte ich diese Linkermeldung:
1>ReportCtrl.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual struct CRuntimeClass * __cdecl CReportCtrl::GetRuntimeClass(void)const " (?GetRuntimeClass@CReportCtrl@@UBAPAUCRuntimeClass@@XZ)"
-
Hab's gefunden: In der ReportCtrl.cpp muss das Makro IMPLEMENT_DYNAMIC verwendet werden.