Как разрешить RTTI с помощью привязки Dynami c? - PullRequest
0 голосов
/ 07 мая 2020

Это школьное задание, призванное научить нас динамическому c связыванию. Я чувствую, что понимаю эти концепции достаточно хорошо, и раньше у меня не было проблем с реализацией привязки Dynami c, но по какой-то причине я не могу исправить эту ошибку.

Я использовал привязку Dynami c раньше в int main(){}, но не использовал его в методе класса. Но он все равно должен работать, верно?

У меня есть информационный базовый класс, от которого происходит класс активности. от класса активности выводятся три класса активности: пешие прогулки, езда на велосипеде, ужин в ресторане.

Все эти классы были протестированы

class information
{
    public:
        information();
        information(char *head, char *body);
        information(const information &to_copy);
        virtual ~information();

        virtual void display(); 
    protected:
        char *title;
        char *info;
};

class activity : public information
{
    public:
        activity();
        activity(char *name, char *location);
        activity(const activity &to_copy);
        virtual ~activity();

        void set_date(int date_of[3]);
        void set_length(char *length_activity);
        void set_ind(bool ind);

        void display();
    protected:
        char *length;//1 hour, 1 day, half day, etc. length of activity
        bool independent;//can the activity be done alone?
        int date[3];//day month year
};
class hike : public activity
{
    public:
        hike();
        hike(char *trail, char *notes);//notes: is it rocky, is it nice, is it sunny, or is there ice etc.
        hike(const hike &to_hike);
        ~hike();

        void set_km(float km);
        void set_elevation(float km);
        void display();
    private:
        float length_km;//metric system yo
        float elevation_km;
};

class bike_ride : public activity
{
    public:
        bike_ride();
        bike_ride(char *start_notes, char *end_notes);//what road are you starting on where are you going, what road will you use to get back home, or where is your destination etc.
        bike_ride(const bike_ride &to_ride);
        ~bike_ride();

        void set_hills(int num_hills);//how many hills are there?
        void set_km(float km);
        virtual void display();
    private:
        int hills;
        float length_km;
};

class dinner_date : public activity
{
    public:
        dinner_date();
        dinner_date(char *restaurant, char *company);//who are you eating dinner with
        dinner_date(const dinner_date &to_dine);
        ~dinner_date();

        void favorite_meals(char *fav_meals[3]);
        void display();
    private:
        char *meals[3];//top 3 favorite things to eat from restaurant.
};

У меня также есть узел class, который содержит 3 указателя "информации" (базовый класс), которые затем преобразуются, чтобы указывать на различные объекты деятельности. 3 указателя базового класса. Я получаю ошибку компилятора: «Недопустимое использование нестатической c функции-члена».

void node::display()
{
   for(int i = 0; i < 3; ++i)
   {
      events[i]->display();
   }
}

Как я могу использовать RTTI для вызова определенной c функции отображения, необходимой для каждого базового класса ptr?

...