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 Bezeichner

    Wie 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.


Anmelden zum Antworten