Funktion über eine zweite Klasse aufrufen



  • Hallo zusammen,

    ich möchte gerne aus einer Klasse eine Funktion aus einer anderen Klasse aufrufen.
    Irgendwie bekomme ich aber ständig folgender Fehlermeldung:
    --------------------------------------------------------------------------
    /tmp/cc2lWSNw.o: In function main': test.cpp:(.text+0x8d8): undefined reference toB::fkt(unsigned int)'
    collect2: error: ld returned 1 exit status
    --------------------------------------------------------------------------

    Der Quellcode wäre hier zulang, daher liste ich nur die wichtigen stellen auf

    class A{
        private:
        ....
        public:
         void fkt(unsigned int var);
    };
    
    void A::fkt(unsigned int var){
     //....
    }
    
    class B{
       private:
       //Array Zeiger für die Klasse A
       A *array[n];
    
       public:
       //Auf diese Stelle bezieht sich meine Frage
       //wie Stelle ich eine Verbindung zu diese Funktion
       //aus der Klasse A  her?
        void fkt(unsigned int var);
    };
    
    int main(){
    
      B b;
    
      b.fkt(5);
    
      return 0;
    }
    

    Ich schätze es ist etwas simples aber ich komme nicht darauf.


  • Mod

    Die Fehlermeldung besagt, dass nirgendwo definiert wird, wie die Funktion B::fkt definiert ist. In Zeile 20 machst du nur bekannt, dass eine Funktion mit diesem Namen existiert (da fehlt übrigens noch ein Semikolon). Es fehlt ein Teil wie die Zeilen 8-10 für die Funktion A::fkt.

    Ansonsten verstehe ich dein Problem nicht. Ruf die gewünschte Funktion einfach mit dem gewünschten Objekt auf. Ich vermute das gewünschte A-Objekt ist eines der Elemente von b.array? In dem Fall also einfach

    array[welcher_index_auch_immer_gemeint_ist].fkt(welche_zahl_auch_immer_gemeint_ist);
    

    Eventuell ist auch Vererbung das, was du suchst. Deine Beschreibung ist nicht klar genug, um sicher sagen zu können, was du möchtest.



  • SeppJ schrieb:

    ... Es fehlt ein Teil wie die Zeilen 8-10 für die Funktion A::fkt.

    Ansonsten verstehe ich dein Problem nicht. Ruf die gewünschte Funktion einfach mit dem gewünschten Objekt auf. Ich vermute das gewünschte A-Objekt ist eines der Elemente von b.array?

    Also du meinst ich sollte B::fkt(){...} hinzufügen. Aber genau das soll ich nicht machen.
    Ich hab noch etwas im Code ergänzt(Zeile 15). Das A-Objekt array soll ein Feld von Zeigern sein in der Klasse B. D.h. ich kann über die Klasse B auf die Attribute von der Klasse zugreifen.

    Die Main ist ein Teil meiner Aufgabe, sie darf nicht verändert werden.
    Wie gesagt da es eine Aufgabe ist möchte ich mich allgemein Ausdrücken, da ich sonst ärger bekomme.


  • Mod

    Dann erklär mal deine Aufgabenstellung. Ich habe keine Ahnung mehr, was du möchtest. Du scheinst irgendwie die Begriffe "Objekt", "Klasse", "Attribut" und "Funktion" falsch zu verstehen.

    Und jetzt kommt auch noch wildes Gefrickel mit Arrays von Pointern hinzu? 😮



  • Ich möchte aus der Main über die Klasse B auf die Funktion aus der Klasse A zugreifen.
    Wie muss ich den Aufruf in der Klasse B realisieren?
    😞 😞


  • Mod

    Um eine Memberfunktion einer Klasse aufzurufen brauchst du zuallererst ein Objekt dieser Klasse! Klassenmemberfunktionen sind keine freien Funktionen, die beziehen sich immer auf ein konkretes Objekt. Welches A-Objekt soll dies sein? Diese Fragen kann auf zwei Arten und Weisen beantwortet werden:

    -Du sagst, welches A-Objekt gemeint ist. Dann geht der Aufruf genau so, wie dein Aufruf von B::fkt in der main. Da gibst du ja auch konkret an, dass der Aufruf sich auf das B-Objekt mit dem Namen b beziehen soll.

    -Oder du sagst, dass jedes B-Objekt auch ein A-Objekt ist und dass das gemeinte A-Objekt also das momentane B-Objekt ist. Das nennt man Vererbung.

    Oder als dritte Möglichkeit die Meta-Antwort:
    -Keines der obigen, weil du eventuell den Zusammenhang zwischen Klassen, Objekten und Membern noch nicht richtig verstanden hast und deine Wünsche nicht klar ausdrücken konntest.


Log in to reply