Vererbung: "multiple definition of..."



  • Hallo,

    ich hab zu meinem Problem nichts in der Suchfunktion gefunden.

    Ich habe Probleme mit abgeleiteten Klassen von einer abstrakten Klasse.

    Hier erstmal der (Beispiel-)Code:

    //ITest.h

    #ifndef _ITEEST_H
    #define _ITEST_H
    #include <iostream>
    
    class ITest
    {
          private:
              int m_x;
          public:
              ITest() 
              {
                  std::cout << "Default-Konstruktor von Basis-Klasse" << std::endl;
              }
              ITest(int x) :m_x(3)
              {
                  std::cout << "Allgemeiner Konstruktor von Basis-Klasse" << std::endl;
              }
              virtual ~ITest()
              {
                  std::cout << "Detor in Base" << std::endl;
              }
              virtual void doSomething() const = 0;
    };
    #endif
    

    //Test.h

    #ifndef _TEST_H
    #define _TEST_H
    #include "ITest.h"
    using namespace std;
    
    class Test : public ITest
    {
          public:
              Test() 
              {
                  cout << "Default-Konstruktor von Test" << endl;    
              }
              Test(int y) :ITest(y)
              {
                  cout << "Allgemeiner Konstruktor von Test" << endl;
              }
              virtual ~Test()
              {
                  cout << "Detor in Test" << endl;
              }
              virtual void doSomething() const;
    
    };
    #endif
    

    //Test.cpp

    #include <iostream>
    #include "Test.h"
    using namespace std;
    
    void Test::doSomething() const
    {
        cout << "Ich bin in Test-doSomething()" << endl;
    }
    

    Der Compiler bringt folgenden Fehler:

    multiple definition of `Test::doSomething() const'
    first defined here
    ld returned 1 exit status
    [Build Error] [InterfaceTest.exe] Error 1

    Also ich weiß nicht, wo das Problem liegt, die Methode ist doch nur einmal definiert.

    Kann jemand weiterhelfen?



  • Dieser Code sollte aus dem Forum gelöscht werden

    Sry, erledigt.



  • Danke für deine Antwort, aber eine <<pure virtual>> -Funktion kann ich doch in der Basisklasse nicht implementieren?

    Jedenfall meckert auch der Compiler:

    pure-specifier on function-definition

    😕



  • Du hast test.cpp zweimal in Deinem Projekt oder etwas anderes was Du uns nicht gepostet hast ist falsch...



  • LordJaxom schrieb:

    Du hast test.cpp zweimal in Deinem Projekt oder etwas anderes was Du uns nicht gepostet hast ist falsch...

    Hm, ich hatte zwischendurch mal einige Dateien vom Projekt entfernt, kann sein, dass irgendwas noch falsch eingebunden ist? 😕

    Aber halten wir fest, dass der Code, den ich geposted habe, FÜR SICH so korrekt ist, oder?



  • OK, ich hab den Fehler gefunden.

    Du hast test.cpp zweimal in Deinem Projekt oder etwas anderes was Du uns nicht gepostet hast ist falsch...

    Ich hatte tatsächlich irgendwo in meinem Projekt die Datei "test.cpp" eingebunden, wo es nicht sein sollte.

    Danke für den Hinweis... 👍



  • 1310-Logik schrieb:

    In der Basisklasse fehlt die Implementation:

    virtual void doSomething() const = 0 {}
    

    😮 😮 sollte man diesen Code nicht aus dem Forum löschen ? ... 😉

    Gruß,

    Simon2.



  • Simon2 schrieb:

    1310-Logik schrieb:

    In der Basisklasse fehlt die Implementation:

    virtual void doSomething() const = 0 {}
    

    😮 😮 sollte man diesen Code nicht aus dem Forum löschen ? ... 😉

    Gruß,

    Simon2.

    Wieso?



  • Dir ist klar das sowas reichlich wenig bringt?

    #ifndef _ITEEST_H 
    #define _ITEST_H
    

    grüße 😃



  • @wissbegieriger: Siehe dazu die Antwort von sly - kein vernünftiger Compiler würde diesen Code akzeptieren.

    (übrigens helfen diese Include-Guards überhaupt nicht gegen Linker-Fehler)


Log in to reply