Linker Error LNK2019 bei eigener Funktion?



  • Hallo!

    Beim Erstellen meines Programmes bekomme ich folgenden Fehler:

    PLGrid.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: int __thiscall PLGrid::StringToInt(class wxString,int)" (?StringToInt@PLGrid@@QAEHVwxString@@H@Z)" in Funktion ""private: void __thiscall PLGrid::ReadServerConf(void)" (?ReadServerConf@PLGrid@@AAEXXZ)".

    Ich habe schon ein wenig gegooglet und zahlreiche Treffer zu diesem Fehler gefunden.
    Nur handelt es sich fast immer um Fehler beim Einbinden externer Bibliotheken o.ä.

    In meinem Fall handelt es sich aber um eine Funktion IN meiner Klasse (StringToInt()), die ich aus anderen Funktionen der Klasse aufrufen möchte.
    Bisher ging das einwandfrei, nur nach einem kompletten Neukompilieren bekomme ich den obigen Fehler.

    Kommentiere ich die Zeilen aus, meckert er beim nächsten Funktionsaufruf usw. StrToInt ist dabei eine public-Funktion, die anderen sind private.

    Ist das ein bekannter Fehler? Spinnt mein Compiler? Darf man auf public-Funktionen nicht innerhalb der Klasse zugreifen? Ich bin ratlos... 😕

    Nur zur Info:
    Ich benutze MVS 2008 und die wxWidgets-Bibliothek.

    Die Funktion:

    int StringToInt(wxString OriginalString, int Base)
    {
    	OriginalString.Trim(true);			//ev. Leerzeichen löschen
    	long HelpLong;						//String in int umwandeln
    	if(OriginalString.ToLong(&HelpLong, Base))
    	{
    		return (int)HelpLong;
    	}
    	else
    	{
    		return -1;						//fehlgeschlagen
    	}
    }
    

    Beliebiger Aufruf:

    if(StringToInt(TestString, 10) < 0)	return false;
    

    Deklaration:

    class PLGrid : public wxPanel
    {
    public:
    	PLGrid(wxFrame *frame, int x, int y, int w, int h);
    	virtual				~PLGrid();
    	//...
    	int    StringToInt(wxString OriginalString, int Base);			
    
    private:
    	//...
    	//z.B.
    	void   ReadServerConf(void);
    	//...
    protected:
    	DECLARE_EVENT_TABLE()
    };
    


  • Wo und wie implementierst du die Funktion? Dein Code sieht aus, als ob er innerhalb der Klassendefinition stehen müsste, was er aber nicht tut...



  • Hallo,

    und wo ist hier:

    int StringToInt(wxString OriginalString, int Base)
    {
        OriginalString.Trim(true);            //ev. Leerzeichen löschen
        long HelpLong;                        //String in int umwandeln
        if(OriginalString.ToLong(&HelpLong, Base))
        {
            return (int)HelpLong;
        }
        else
        {
            return -1;                        //fehlgeschlagen
        }
    }
    

    zu erkennen, dass diese Definition eine Funktion festlegt, die eine Methode der Klasse sein soll? Mir fehlt hier etwas..., etwas mit einem :: und davor noch was..., vor dem Namen 😉

    MfG,

    Probe-Nutzer



  • Vielen, vielen Dank, ich hatte tatsächlich den Klassenamen bei der Funktionsdefinition vergessen!

    die winzige Korrektur "PLGrid::" vor "StringToInt" hat den Fehler schon behoben!

    🙂
    Dankeschön!

    Man sollte sich halt nicht auf Str + C aus der Deklaration verlassen. 😉

    Edit: Und das Schlimmste ist, dass ich dieselbe Frage vor kurzem schon einmal gestellt habe... bei demselben Fehler! Ich werd alt... 😞


Anmelden zum Antworten