Nicht aufgelöstes externes Symbol... (error LNK2001)



  • Hallo,
    Ich habe angefangen C++ zu programmieren habe jetzt ein Problem.

    #include <windows.h>
    
    //Basisklasse
    class CGeometricalObject
    {
    protected:
    	int m_x;
    	int m_y;
    
    public:
    	CGeometricalObject();
    	CGeometricalObject(int x, int y);
    
    	void SetX(int x);
    	void SetY(int y);
    
    	virtual void Draw(HDC hDC);
    };
    
    CGeometricalObject::CGeometricalObject() : m_x(0), m_y(0) {}
    CGeometricalObject::CGeometricalObject(int x, int y) : m_x(x), m_y(y) {}
    void CGeometricalObject::SetX(int x)
    {
    	m_x = x;
    }
    
    void CGeometricalObject::SetY(int y)
    {
    	m_y = y;
    }
    
    //Ableitung1 -> Rechteck
    class CRectangle : public CGeometricalObject
    {
    protected:
    	int m_Width;
    	int m_Height;
    
    public:
    	CRectangle();
    	CRectangle(int x, int y, int Width, int Height);
    
    	void SetWidth(int Width);
    	void SetHeight(int Height);
    	void Draw(HDC hDC);
    };
    
    void CRectangle::SetWidth(int Width)
    {
    	m_Width = Width;
    }
    
    void CRectangle::SetHeight(int Height)
    {
    	m_Height = Height;
    }
    
    void CRectangle::Draw(HDC hDC)
    {
    	Rectangle(hDC, m_x, m_y, m_x + m_Width, m_y + m_Height);
    }
    
    int main(void)
    {
    	CRectangle *Rechteck = new CRectangle();
    	Rechteck->SetX(10);
    	Rechteck->SetY(10);
    	Rechteck->SetHeight(50);
    	Rechteck->SetWidth(100);
    
    }
    

    Jetzt ist nur das Problem, dass immer folgende Fehlermeldungen kommen:

    error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall CGeometricalObject::Draw(struct HDC__*)"(?Draw@CGeometricalObject@@UAEXPAUHDC__@@@Z)".
    
    error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CRectangle::CRectangle(void)"(??0CRrectangle@@QAE@XZ)" in Funktion "_main".
    
    fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
    

    Weis jemand was ich da ändern muss? Weil es den Fehler ja nur beim aufrufen gibt und kein Syntax-Fehler in der Klasse an sich ist.

    MFG
    Neokil



  • virtual void Draw(HDC hDC);

    ->

    virtual void Draw(HDC hDC) {}
    bzw.
    virtual void Draw(HDC hDC) = 0

    je nach dem, welches verhalten du haben möchtest - bei = 0 kann man keine Instanz von CGeometricalObject erstellen (stichwort (pur) abstrakt).
    der Sinn der ersten Variante sollte offensichtlich sein...

    bb



  • PS:

    CRectangle();
    CRectangle(int x, int y, int Width, int Height);

    schon mal gedacht, die auch zu implementieren?

    bb



  • also vielen dank es funkrioniert endlich 😉

    MFG
    Neokil


Anmelden zum Antworten