Problem beim compilieren: "undefined reference to `vtable for..."



  • Hallo, Ich habe den folgenden code und versuche es zu compilieren bzw linken. Angeblich ist alles gut, nun verstehe ich nicht warum ich die am ende eingefügte meldungen beim compilieren kriege. Wenn ich die aufruf auf der methode inference entferne, kriege ich keine Meldungen...

    Der Code, vereinfacht ist in 3 verschiedene dateien verteilt:

    (xfuzzy.h)
    
    class FuzzyInferenceEngine {
    public:
     virtual double* crispInference(double* input) = 0;
     virtual double* crispInference(MembershipFunction* &input) = 0;
     virtual MembershipFunction** fuzzyInference(double* input) = 0;
     virtual MembershipFunction** fuzzyInference(MembershipFunction* &input) = 0;
    };
    
    (esp_9_class_ideal.h)
    
    class esp_9_class_ideal: public FuzzyInferenceEngine {
    public:
     esp_9_class_ideal() {};
     virtual ~esp_9_class_ideal() {};
     virtual double* crispInference(double* input);
     virtual double* crispInference(MembershipFunction* &input);
     virtual MembershipFunction** fuzzyInference(double* input);
     virtual MembershipFunction** fuzzyInference(MembershipFunction* &input);
     void inference( double _i_speed, double _i_steer, double _i_ang_vel, double _i_lat_force, double *_o_oversteer );
    private:
     void RL_esp(MembershipFunction &speed, MembershipFunction &steer, MembershipFunction &ang_vel, MembershipFunction &lat_force, MembershipFunction ** _o_oversteer_9);
    };
    
    (main.cpp)
    
    int main( int argc, char **argv ) {
    
      esp_9_class_ideal esp9ideal;
    ...
    
      esp9ideal.inference((double)vel2, (double)steer, (double) angvel, (double)lat_force, & oversteer);
    
    ...
    }
    

    Die Fehler Meldungen sind die folgende:

    offroad-main.o: In function esp\_9\_class_ideal': esp\_9\_class\_ideal.h:175: undefined reference tovtable for esp_9_class_ideal'
    In function main': /main.cpp:439: undefined reference toesp_9_class_ideal::inference(double, double, double, double, double*)'
    offroad-main.o: In function ~esp\_9\_class_ideal': /esp\_9\_class\_ideal.h:176: undefined reference tovtable for esp_9_class_ideal'

    Bitte um Hilfe!!! Vielen Dank und viele Grüße!!!



  • Öhm...
    Ganz banale Frage: Hast Du die Definition von esp_9_class_ideal::inference(double, double, double, double, double) vergessen?! 😕



  • Natürlich eben nicht. Habe trotzdem gerade geguckt ob es alles stimmt. 😉
    Das Problem taucht beim linken auf, also, nach der Kompilierung



  • Hast Du vergessen das Objekt, welches die Definition enthält zu linken?



  • müsste nicht theoretisch der destructor der base class virtual sein

    sry kenne mich mit vererbung nicht so gut aus da ich noch nix damit zu tun hatte
    aber das wäre ein häufig gemachter fehler...



  • müsste nicht theoretisch der destructor der base class virtual sein

    Das habe ich schon probiert und es ändert sich gar nichts 😉

    Hast Du vergessen das Objekt, welches die Definition enthält zu linken?

    Wie meinst du "zu linken". Muss ich etwas besonders dazu eingeben? Also, ich hab in main.cpp #include "esp_9_class_ideal.h" und in esp_9_class_ideal.h ein #include "xfuzzy.h". Außerdem benutze ich zur Zeit Kdevelop 3.4.1 zum codieren/compilieren/linken?

    Vielen Dank



  • Bonirau schrieb:

    müsste nicht theoretisch der destructor der base class virtual sein

    Das habe ich schon probiert und es ändert sich gar nichts 😉

    Vom linken her vielleicht nicht, aber in der Regel sollte die Basisklasse immer über einen virtuellen Destruktor verfügen (der Ausnahmefall ist weit seltener).

    Bonirau schrieb:

    Hast Du vergessen das Objekt, welches die Definition enthält zu linken?

    Wie meinst du "zu linken". Muss ich etwas besonders dazu eingeben? Also, ich hab in main.cpp #include "esp_9_class_ideal.h" und in esp_9_class_ideal.h ein #include "xfuzzy.h". Außerdem benutze ich zur Zeit Kdevelop 3.4.1 zum codieren/compilieren/linken?

    Ich kenne Kdevelop nicht, bei einem Komandozeilencompiler müsstest du auch die cpp mit Angeben, und in Visual C++ fügt man diese dem Projekt hinzu.

    cu André


Log in to reply