Anfänger - Linkerfehler: undefined reference



  • Hallo,

    danke erstmal für die Antwort!

    ja, der code ist 1:1

    Leider bekomme ich noch immer den selben Linker-Fehler 😕

    Ich mache den Standard-Konstruktor privat, weil ich erwzingen will, einen Konstruktor zu benutzen, der Parameter annimmt. Zumindest so die Theorie - weil ich dachte gelesen zu haben, dass der Compiler den Standarkonstruktor immer automatisch generiert.



  • Was ist denn das für ein strubbeliger Compiler, der diesen Code schluckt, aber dann Linkerfehler ausspuckt?



  • //Konstruktoren
    //             Tier(int _beine, int _hoehe);
                 Tier(string _name, int _beine, int _hoehe);
    

    Auskommentieren, aber dann implementieren... 😉



  • Hi,

    danke, ich glaub das wars 😉

    kann ich noch ne andere Frage stellen (wenn ich neues Thema aufmachen soll, bitte sagen 😉 )

    Es geht um die strings und den Kopierkonstruktor.

    Muss ich diese im Kopierkonstruktor kopieren oder kann ich die einfach in der initialisierungsliste zuweisen?

    Die strings sind ja als "normale" objekte angelegt und daher für micht nicht dynamisch ( wenn man mal davon absieht, was dahinter passiert). und normale Objekte werden doch einfach kopiert, so dass es eigentlich zu dem Problem mit der flachen Kopie gar nicht kommen kann, oder?



  • ChaosNo1 schrieb:

    Die strings sind ja als "normale" objekte angelegt und daher für micht nicht dynamisch ( wenn man mal davon absieht, was dahinter passiert). und normale Objekte werden doch einfach kopiert, so dass es eigentlich zu dem Problem mit der flachen Kopie gar nicht kommen kann, oder?

    so isses.

    du brauchst keinen destruktor, wie ich sehe. dann brauchste normalerweise auch keinen kopierkonstruktor und keinen zuweisungsoperator.



  • Danke 😉

    ja, das mit den destruktor ist auch mehr zum testen 😉



  • ChaosNo1 schrieb:

    Ich mache den Standard-Konstruktor privat, weil ich erwzingen will, einen Konstruktor zu benutzen, der Parameter annimmt. Zumindest so die Theorie - weil ich dachte gelesen zu haben, dass der Compiler den Standarkonstruktor immer automatisch generiert.

    Das ist wie gesagt falsch. Der Standardkonstruktor wird nur automatisch generiert, wenn keine benutzerdefinierten Konstruktoren vorhanden sind.

    ChaosNo1 schrieb:

    danke, ich glaub das wars 😉

    Wenn es das wirklich war, solltest du unbedingt den Compiler wechseln. Wenn nicht deklarierte Bezeichner erst auf Linker-Ebene zu einem Fehler führen und Basisklassenkonstruktoren mit Tier::Tier aufgerufen werden können, bringt der Compiler nicht viel. Was für einen benutzt du überhaupt?



  • Nexus schrieb:

    ChaosNo1 schrieb:

    danke, ich glaub das wars 😉

    Wenn es das wirklich war, solltest du unbedingt den Compiler wechseln. Wenn nicht deklarierte Bezeichner erst auf Linker-Ebene zu einem Fehler führen und Basisklassenkonstruktoren mit Tier::Tier aufgerufen werden können, bringt der Compiler nicht viel. Was für einen benutzt du überhaupt?

    ChaosNo1 schrieb:

    Ich benute Dev C++ als Entwicklungsumgebung

    Nimm Code::Blocks (ist der Nachfolger von DevC++) - oder noch besser, nimm MSVC:
    http://www.microsoft.com/express/vc/

    bb



  • Habe zwischenzeitlich das ganze auf Vstudio implementiert und es nochmal ausprobiert. Dort hat der Compiler auch den Fehler angezeigt und nicht der Linker.

    Und ich dachte immer Dev-C++ soll so gut sein. Wusste gar nicht, dass es da einen Nachfolger gibt 😉

    @Nexus: danke für den Hinweis, du hast recht. Aber in den Unterlagen von meinem Prof steht, dass es nicht sehr elegant ist, weil der Compiler einen Fehler ausspuckt, wenn der Standardkonstruktor fehlt. Um diesen Fehler zu umgehen, schlägt er vor, den Standarkonstruktor als private zu deklarieren.

    Danke für die Hilfe!



  • ChaosNo1 schrieb:

    Und ich dachte immer Dev-C++ soll so gut sein.

    Naja - früher war es das vll mal - aber es gilt schon ziemlich lange als deprecated - d.h. du solltest es nicht mehr nutzen...

    ChaosNo1 schrieb:

    Aber in den Unterlagen von meinem Prof steht, dass es nicht sehr elegant ist, weil der Compiler einen Fehler ausspuckt, wenn der Standardkonstruktor fehlt. Um diesen Fehler zu umgehen, schlägt er vor, den Standarkonstruktor als private zu deklarieren.

    Ich kenn DevC++ zwar nicht aus eigener Erfahrung, aber ich kann mir solch ein Verhalten auch nicht beim schlechtesten Compiler der Welt vorstellen...
    Zitier mal das, was dein Prof. da geschrieben hat - ich wette, er hat was anderes geschrieben oder zumindest sagen wollen ^^

    bb



  • ChaosNo1 schrieb:

    @Nexus: danke für den Hinweis, du hast recht. Aber in den Unterlagen von meinem Prof steht, dass es nicht sehr elegant ist, weil der Compiler einen Fehler ausspuckt, wenn der Standardkonstruktor fehlt. Um diesen Fehler zu umgehen, schlägt er vor, den Standarkonstruktor als private zu deklarieren.

    Wenn er das wirklich vorschlägt, hat er wohl nicht gerade viel Ahnung. Naja, lass den Standardkonstruktor einfach weg, ein brauchbarer Compiler macht keine Probleme deswegen. Unter Windows kann ich dir auch nur MSVC++ empfehlen, diese IDE ist wirklich sehr gut.



  • Und achte bitte ein wenig auf deine Einrückung. Dann sieht das ganze auch gleich viel besser aus. Immerhin benutzt du schon const. 👍
    Dann solltest du lediglich die Unterstriche von dem Bezeichner Anfang wegnehmen. (sind für Compiler reserviert)



  • drakon schrieb:

    Dann solltest du lediglich die Unterstriche von dem Bezeichner Anfang wegnehmen. (sind für Compiler reserviert)

    imho gilt das nur für 2 unterstriche oder 1unterstrich + großbuchstabe am anfang!?

    bb


Anmelden zum Antworten