Array aus Zeigern auf Methoden einer Klasse.



  • Also, ich habe eine Klasse Date und eine Klasse Identity. Die Klasse Identity enthält ein private Datenelement vom Typ 'Date'. Nun würde ich gerne in einer Methode der Klasse Identity ein Array aus Zeigern auf Methoden des Objektes ('birthdate') vom Typ 'Date' machen. Leider hab ichs bisher nicht hingekriegt.

    Folgendes habe ich probiert, geht leider nicht:

    class Date
    {
         private:
                 int day;
                 int month;
                 int year;
         public:
                 ...
                 int getDay() const { return day; }
                 int getMonth() const { return month; }
                 int getYear() cnost { return year; }
                 ...
    };
    
    class Identity
    {
          private:
                  ...
                  Date birthdate;
          public:
                  ...
                  void generateID();
                  ...
    };
    
    // Hier wirds wichtig, bzw. hier kommt der Compiler-Fehler.
    void Identity::generateID();
    {
         // Wie muss die Initalisiererliste aussehen?
         int (*funcVec[])() { birthdate.getYear, birthdate.getMonth, birthdate.getDay }; // So gehts nicht (Compiler-Fehler 01)
         int (*funcVec[])() { Date::getYear, Date::getMonth, Date::getDay }; // So auch nicht (Compiler-Fehler 02)
    }
    
    // Compiler-Fehler 01:
    argument of type `int (Date::)()' does not match ` int (*)()'
    
    // Compiler-Fehler 02:
    no matches converting function `getYear' to type ` int (*)()'
    

    //

    Wäre wirklich nett, wenn mir jemand helfen könnte 🙂

    Caipi



  • int (Date::*funcVec[])() const = { &Date::getYear, &Date::getMonth, &Date::getDay };
    


  • //pointer to single method
    typedef int (Date::*PDataFunc) () const;

    //array of pointers to methods
    PDataFunc funcVec[] = {&Date::getDay, &Date::getMonth, &Date::getYear};



  • ist zwar nicht das gelbe vom ei, aber funktioniert:

    void Identity::generateID()
    {
    	int pDay = birthdate.getDay();
    	int pMonth = birthdate.getMonth();
    	int pYear = birthdate.getYear();
    	int* funcVec[] = { &pDay, &pMonth, &pYear};
    }
    


  • Super Danke, so funktionierts. Aber könnt ihr mir vielleicht erkären was es mit dem Date:: am Anfang auf sich hat? (Bedeutet das im Namensbereich Data oder was??)

    Und noch eine Frage: Wie sieht dann ein Methodenaufruf aus?

    //Edit:
    Ich glaube ich weiß jetzt was das bedeutet: (Bitte korrigiert mich, wenn ich etwas falsches sage!)
    Das Date:: am Anfang bedeutet, dass die Funktionen für Objekte der Klasse Date aufrufbar sein sollen.

    Sieht ein Methodenaufruf so aus?

    (birthdate.*funcVec[0])(); // Z.B.
    

    Caipi


Anmelden zum Antworten