fage



  • Moin ich habe ein kleines Problem,
    bekomme diese Fehler, kann damit aber nicts anfangen.

    1>main2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: double __thiscall xml_configuration::get_double(char const *,double,bool )const " (?get_double@xml_configuration@@QBENPBDNPA_N@Z)" in Funktion ""float __cdecl hillc(double,double,double,double (__cdecl)(double *,double),double * const,double * const,double,double,double)" (?hillc@@YAMNNNP6ANPANN@ZQAN2NNN@Z)".

    was bedeutet dieser Fehler ? 😕

    lg



  • Das ist ein Linker-Fehler. Irgendwo möchtest Du eine Funktion benutzen, die nur deklariert wurde. Die Funktionsdefinition ist entweder nicht vorhanden, oder Du hast sie in einer Übersetzungseinheit und vergessen, diese beim "Linken" zu berücksichtigen.

    Beispiel:

    // main.cpp
    #include <iostream>
    
    extern const char message[]; // Deklaration, keine Definition
    
    int main()
    {
      std::cout << message << '\n';
    }
    

    Aus dieser einen Übersetzungseinheit kann man keine ausführbare Datei erzeugen. Es lässt sich kompilieren (zu einer Objekt-Datei) aber das war's auch schon. Der Linker, der Objekt-Dateien zusammenfasst, um daraus ein ausführbares Programm zu machen, wird sich über die fehlende Definition von message beschweren.

    kruka@cambria:~/ccpp/test$ g++ -o programm main.cpp 
    /tmp/ccPDuM4D.o: In function `main':
    main.cpp:(.text+0xd): undefined reference to `message'
    collect2: ld returned 1 exit status
    

    Mit einer zweiten Übersetzungseinheit, die eine Definition von message enthält...

    // foo.cpp
    
    extern const char message[] = "Hello World!";
    

    klappt das "Linken" auch:

    kruka@cambria:~/ccpp/test$ g++ -c main.cpp 
    kruka@cambria:~/ccpp/test$ g++ -c foo.cpp 
    kruka@cambria:~/ccpp/test$ ls
    foo.cpp  foo.o  main.cpp  main.o
    kruka@cambria:~/ccpp/test$ g++ -o programm main.o foo.o
    kruka@cambria:~/ccpp/test$ ls
    foo.cpp  foo.o  main.cpp  main.o programm
    kruka@cambria:~/ccpp/test$ ./programm 
    Hello World!
    

    kk



  • Nutzt du vielleicht irgendeine externe Bibliothek? Du hast dann wohl nur die Header-Datei inkludiert aber vergessen die entsprechende .lib statisch oder .dll dynamisch dazu zu linken.

    Daher wohl der Fehler.

    Lg freeG



  • ein beliebter fehler ist auch, wenn man bei der definition das klassenname:: vergessen hat - sieht aber eher nach ner lib als nach selbstgeschriebenem code aus -> siehe fr33gs antwort



  • Wer ist eigentlich fage?



  • übrigens schrieb:

    Wer ist eigentlich fage?

    Das ist der Schutzpatron der schlechten Threadtitel. Der steht all jenen bei, die bereits beim Formulieren ihres Anliegens versagen.


Anmelden zum Antworten