Ergebnis 1 bis 3 von 3

Thema: Ich komme nicht auf meinen Fehler! Bitte helft mir!!!

  1. #1
    Sascha0081
    Gast

    Standard Ich komme nicht auf meinen Fehler! Bitte helft mir!!!

    ich bekomme immer folgenden fehler:

    Beispiel error LNK2019: Nicht aufgelöstes externes Symbol '"public: int __thiscall CPoint::GetX(void)const " (?GetX@CPoint@@QBEHXZ)', verwiesen in Funktion '"public: int __thiscall CRectangle::GetUpperLeft(void)" (?GetUpperLeft@CRectangle@@QAEHXZ)'

    Beispiel fatal error LNK1120: 1 unaufgelöste externe Verweise


    ich poste euch jetzt mal meinen code und dann sage ich wo ich ein problem habe!
    -------------------------------------------
    CPoint.h
    -------------------------------------------
    class CPoint
    {
    public:
    void SetX(int x);
    void SetY(int y);

    inline int GetX() const;
    inline int GetY() const;

    private:
    int m_x;
    int m_y;
    };
    -------------------------------------------
    CPoint.cpp
    -------------------------------------------
    #include "CPoint.h"

    void CPoint::SetX(int x)
    {
    m_x = x;
    }

    void CPoint::SetY(int y)
    {
    m_y = y;
    }

    inline int CPoint::GetX() const
    {
    return m_x;
    }

    inline int CPoint::GetY() const
    {
    return m_y;
    }
    -------------------------------------------
    CRectangle.h
    -------------------------------------------
    #include "CPoint.h"

    class CRectangle
    {
    public:
    CRectangle(int top, int left, int bottom, int right);
    ~CRectangle();

    int GetUpperLeft();

    private:
    int m_top;
    int m_left;
    int m_bottom;
    int m_right;

    CPoint m_UpperLeft;
    CPoint m_UpperRight;
    CPoint m_LowerLeft;
    CPoint m_LowerRight;
    };
    -------------------------------------------
    CRectangle.cpp
    -------------------------------------------
    #include "CRectangle.h"

    CRectangle::CRectangle(int top, int left, int bottom, int right)
    {
    m_top = top;
    m_left = left;
    m_bottom = bottom;
    m_right = right;

    m_UpperLeft.SetX(left);
    m_UpperLeft.SetY(top);

    m_UpperRight.SetX(left);
    m_UpperRight.SetY(top);

    m_LowerLeft.SetX(left);
    m_LowerLeft.SetY(bottom);

    m_LowerRight.SetX(left);
    m_LowerRight.SetY(bottom);
    }

    CRectangle::~CRectangle() {}

    int CRectangle::GetUpperLeft()
    {
    return m_UpperLeft.GetX();
    }
    -------------------------------------------
    Main.cpp
    -------------------------------------------
    #include <iostream>
    #include "CRectangle.h"

    using namespace std;

    int main()
    {
    CRectangle myRectangle (100, 20, 50, 80);

    cout << myRectangle.GetUpperLeft();
    cin;

    return 0;
    }

    /////////////

    Immer wenn ich auf myRectangle.GetUpperLeft(); zugreifen möchte funktioniert es nicht und ich komme nicht auf meinen Fehler!

    Bitte helft mir!!!

    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Gast

    Standard

    Hi,

    Vorab:
    -------
    wenn Du alle 'inline'-Qualifier weglässt, lässt sich das Programm ohne Fehler binden.
    Da es 'inline' ohnehin nur zur Performance-Steigerung gibt, d.h. keine funktionalen Effekte hat, ist Dein Problem vielleicht schon gelöst, wenn Du darauf einfach verzichtest.

    Wenn Du es aber trotzdem machen willst, dann verstehe ich das so:
    ------------------------------------------------------------------------------
    In der CPoint.h wird mit "inline int GetX() const;" versprochen, daß es eine GetX-Definition geben wird.
    In CRectangle.cpp rufst Du GetX dann ja auf.
    Der Linker stellt aber nun fest, daß GetX gar nicht definiert wurde, obwohl Du es ja in CPoint.cpp gemacht hast!

    Wie das?
    Nun, ich denke, daß die inline-Angabe in der .cpp bewirkt, daß der dort angegebene Code an den Stellen des Aufrufes sofort expandiert eingefügt wird und somit gar keine echte Definition für das Gegenstück in der .h entsteht.

    Lösung:
    Die Implementierung wird in der .h-Headerdatei vorgenommen.
    In der .cpp taucht die Funktion dann gar nicht mehr auf.
    Beispiel in der CPoint.h:
    inline int GetX() const
    {
    return m_x;
    };

    Gruß
    Paddy

  3. #3
    Gast

    Standard

    Hallo

    Wenn inline, dann immer alles in den header. Dann gibt es auch keine Problem.

    chrische

Ähnliche Themen

  1. Mein Mikro vom Headset geht nicht!! Bitte helft mir!!
    Von Lübecker im Forum Computer - Internet Forum
    Antworten: 3
    Letzter Beitrag: 26.05.2007, 02:14
  2. großer Grafik(Treiber) Fehler bei XP mit SP2-Helft bitte
    Von Mic im Forum Computer - Internet Forum
    Antworten: 9
    Letzter Beitrag: 17.03.2007, 14:04
  3. bild verlinken bitte bitte helft mir
    Von Gast im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 3
    Letzter Beitrag: 12.03.2006, 14:12
  4. BITTE helft mir ich weis nicht mehr weiter!!!!!!!!!!!!!
    Von Ajmal im Forum Forum für Grafiken und Bildbearbeitung
    Antworten: 2
    Letzter Beitrag: 02.03.2005, 09:58
  5. google findet meine Seite nicht, helft mir, BITTE!!!
    Von PM-Invider im Forum HTML & CSS Forum
    Antworten: 1
    Letzter Beitrag: 20.09.2003, 18:17

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •