Linker Fehler 2019



  • Fehlermeldung:

    PPMOutputDlg.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: double __thiscall AdaptiveAlgorithm::getAmplitudeDOE(int,int)" (?getAmplitudeDOE@AdaptiveAlgorithm@@QAENHH@Z)" in Funktion ""protected: void __thiscall CPPMOutputDlg::OnRButtonDown(unsigned int,class CPoint)" (?OnRButtonDown@CPPMOutputDlg@@IAEXIVCPoint@@@Z)".
    Y:\CPP\2006\IQO\LightModulator2DMat\Debug\LightModulator2D.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    

    Ich kenne inzwischen einige Fallstricke die einen Fehler 2019 auslösen wie nichteingebundene cpp Datei oder Fehlende Includes, aber hier stimmt beides und ich bin ratlos.

    Ich habe eine Klasse
    - CGraphCtrl (abgeleitet von CStatic)
    - CPPMOutputDlg (abgeleitet von CDialog)
    - AdaptiveAlgorithm

    In CPPMOutputDlg.cpp steht
    #include "AdaptiveAlgorithm.h"
    #include "GraphCtrl.h"

    und alle .h und .cpp Dateien sind im Projekt.

    Bei der Zeile: (m_WndPicture vom Typ CGraphCtrl)
    m_WndPicture.SetPlotDataXY(ix,iy, algorithm.getAmplitudeDOE(ix,iy));

    spuckt der Compiler die Fehlermeldung raus.

    Wonach kann ich noch gucken?

    Matthias



  • "nicht aufgelöstes externes Symbol" sagt dir, dass du eine Funktion zwar im Header deklariert hast, dass aber der Teil in der cpp fehlt. 🙂



  • estartu schrieb:

    "nicht aufgelöstes externes Symbol" sagt dir, dass du eine Funktion zwar im Header deklariert hast, dass aber der Teil in der cpp fehlt. 🙂

    In CGraphCtrl.h

    void SetPlotDataXY(const int x, const int y, double value);
    

    In CGraphCtrl.cpp

    void CGraphCtrl::SetPlotDataXY(const int x, const int y, double value)
    {
    	PlotData[x][y]=value;
    }
    

    In AdaptiveAlgorithm.h

    inline double getAmplitudeDOE(const int x, const int y);
    

    In AdaptiveAlgorithm.cpp

    inline double AdaptiveAlgorithm::getAmplitudeDOE(const int x, const int y){ return m_A0[x][y];}
    

    ich sehe daher nicht wo etwas fehlt.

    Matthias



  • Es lag daran das ich getAmplitudeDOE als inline deklariert hatte. Ein Ändern in

    double getAmplitudeDOE(const int x, const int y);

    und der Fehler ist weg.

    Warum?

    Matthias



  • Schau dir ganz einfach mal an, was "inline" bedeutet, dann solltest du es womöglich verstehen 😉


Log in to reply