undefined reference problem



  • @john-0 ich habe seit deinem ersten Post in diesem Thread garnichts gelöscht. Ich habe mich nur in meinem vorigen Post korrigiert. "Ließ den Satz den" ~> "Ließ die beiden Sätze die".

    ps: Ach so, in meiner ersten Antwort auf deinen ersten Post habe ich "Guckst du" hinzugefügt und einen Zeilenumbruch entfernt.

    @john-0 sagte in undefined reference problem:

    Jetzt, hast Du es richtig verwendet, und vorher nicht.

    Wo was wann? In dem von dir zitiertem? Ne. Und auch daran habe ich nichts geändert. Die beiden Sätze stehen genau so wie von dir zitiert in jeder Revision des betreffenden Posts. Von Anfang an.



  • @Swordfish sagte in undefined reference problem:

    @john-0 ich habe seit deinem ersten Post in diesem Thread garnichts gelöscht.

    Du hast Dein Posting mit dem Fehler gelöscht!

    Fehler passieren jedem und immer wieder, aber Deine Reaktion auf einen neutralen Hinweis ist absolut daneben. Wenn man so sich benimmt, braucht man sich nicht zu wundern, wenn immer weniger Nutzern im Forum sind. Ist es so schwer einen simplen Flüchtigkeitsfehler zuzugeben und sich zu korrigieren?

    @Swordfish sagte in

    … Man inkludiert die Definition der Klasse (bei Dir in pokermind.h) in der Implementierung (bei Dir pokermind.cpp). …

    Das casus delicti um das es geht.



  • @john-0 sagte in undefined reference problem:

    Du hast Dein Posting mit dem Fehler gelöscht!

    In diesem gesamten Thread gibt es nur einen einzigen gelöschten Post von mir, in dem es um spitze Klammern versus Anführungszeichen bei #include ging. Ich habe ihn gelöscht, weil ich kein Fan von doppelposts bin und habe den Inhalt 1:1 in den vorhergehenden Post eingefügt. Aber nur für dich, stelle ich auch diesen Post wieder her, wenn es denn sein muss.

    @john-0 sagte in undefined reference problem:

    Das casus delicti um das es geht.

    Ja. Was soll daran falsch sein?



  • @Swordfish sagte in undefined reference problem:

    Ja. Was soll daran falsch sein?

    Die Definition einer member function ist deren Implementation. D.h. es hätte bei Dir heißen müssen, man inkludiert in der .cpp Datei die Deklaration der Klasse die Definition der Klasse mit den Deklarationen der member functions und definiert die member functions ebendort in der .cpp Datei. Templates sind die Ausnahme, da dort Deklaration und Definition sowohl von Klassen wie auch der member functions im Header erfolgen.



  • @john-0 sagte in undefined reference problem:

    Die Definition einer member function ist deren Implementation.

    Wo rede ich in dem von dir Zitiertem über irgendwelche Member??

    @john-0 sagte in undefined reference problem:

    D.h. es hätte bei Dir heißen müssen, man inkludiert in der .cpp Datei die Deklaration der Klasse

    Nein, hätte es nicht.

    class foo
    {
        void bar();
        int hugo();
        bool norbert();
    };
    

    ist eine Klassendefinition und die inkludiert man.

    [class]/2:

    [...] A class-specifier is commonly referred to as a class definition. A class is considered defined after the closing brace of its class-specifier has been seen even though its member functions are in general not yet defined. [...]



  • Jetzt lass ich mich von dieser Schlamperei auch noch anstecken.

    Im Header muss die Definition der Klasse stehen und bei normalen (d.h. nicht Template Klassen) steht in der Definition der Klasse nur die Deklaration der member functions. Die Definition der member functions (Das ist der Punkt auf den es hier im Thread ankommt, weil es den Linkerfehler verursachte.) erfolgt nur in der .cpp Datei. Wenn man explizit Probleme mit den Linkage von member functions hat, sollte man darauf hinweisen, dass Deklaration und Definition von member function penibel zu unterscheiden sind. Die Klassendefinition verletzt die one definition rule, und ist eine der wenigen Ausnahmen von dieser Regel. Deshalb kann man Deinen Satz so nicht stehen lassen.



  • @john-0 sagte in undefined reference problem:

    Jetzt lass ich mich von dieser Schlamperei auch noch anstecken.

    Schlamperei ist, einen Satz nicht so zu lesen wie er dasteht und anzunehmen, die Definition von membern hätte etwas mit der Definition einer Klasse zu tun. Ich habe dir in meiner ersten Reaktion schon einen Link zur Terminologie gegeben, den du gepflogen ignoriert hast. Dann habe ich dir die zwei Sätze auf die es ankommt sogar rausgesucht und hier zitiert. Wenn du es immer noch nicht schnallst ist das nicht mein Problem.

    @john-0 sagte in undefined reference problem:

    Die Klassendefinition verletzt die one definition rule, und ist eine der wenigen Ausnahmen von dieser Regel.

    So ein Blödsinn.

    @john-0 sagte in undefined reference problem:

    Deshalb kann man Deinen Satz so nicht stehen lassen.

    Denk was du willst. Mir ist es zu blöd mit dir darüber zu diskutieren.



  • @mmmmmmmm sagte in undefined reference problem:

    Ok, das ist halt mein Status für ein leeres Board. Ich komme von Java und da kann mein Array nicht leer sein. Ich vermute in C++ geht das mit einem Pointer auf einen vector.

    Du kannst auch "vector::empty()" als Indikator für deinen Status nutzen. Pointer sind da unnötig.



  • ...und std::vector entspricht auch eher einer ArrayList in Java, die natürlich auch leer sein kann.



  • @It0101 sagte in undefined reference problem:

    vector::empty()

    Oh ja, daran habe ich garnicht gedacht, deswegen auch mein Verweis auf vector<>::size() weiter vorne 😞

    @john-0 Um dir nochmal auf die Sprünge zu helfen:

    class foo {  // --------------------------------------------\
        void bar();     // declaration of a member function      \
        void qux() {};  // definition of a member function        >  definition of a class
    };  // ------------------------------------------------------/
    

Anmelden zum Antworten