Круговые зависимости объявлений

Я пытаюсь реализовать пример шаблона посетителя, но у меня проблема с циклическими зависимостями объявлений классов. Когда я делаю пересылку декларации класса Visitor, классы Россия и Англия не делаютЯ не знаю, что у посетителя есть метод посещения, но когда я расширяю предварительное объявление Посетителя для принятия метода, мне нужно использовать классы Англия и Россия, но им нужно знать, кто такой Посетитель, поскольку они используют этот тип в своем коде. Я пробовал много вариантов упорядочения кода, но полностью провалился. Пожалуйста, помогите мне понять, что нужно С ++ для этого. Благодарю.

#include 
#include 

using namespace std;

class Visitor;

class Land {
  public:
    virtual void accept(const Visitor *v);
};

class England : public Land {
  public:
    void accept(const Visitor *v) {
      v->visit(this);
    }
};

class Russia : public Land {
  public:
    void accept(const Visitor *v) {
      v->visit(this);
    }
};

class Visitor {
  public:
    void visit(const England *e) const {
      printf("Hey, it's England!\n");
    }

    void visit(const Russia *r) const {
      printf("Hey, it's Russia!\n");
    }
};

class Trip {
  private:
    vector *l;
  public:
    explicit Trip(vector *_l):l(_l) {}
    void accept(Visitor *v) {
      for (unsigned i = 0; i < l->size(); i++) {
        l->at(i).accept(v);
      }
    }
};

int main() {
  England england;
  Russia russia;
  vector trip_plan;
  trip_plan.push_back(england);
  trip_plan.push_back(russia);
  trip_plan.push_back(england);
  Trip my_trip(&trip_plan);
  Visitor me;
  my_trip.accept(&me);
  return 0;
}

И есть выход G ++

c++ -ansi -Wall -Wextra -Wconversion -pedantic -Wno-unused-parameter  -o vp vp.cc
vp.cc: In member function ‘virtual void England::accept(const Visitor*)’:
vp.cc:40: error: invalid use of incomplete type ‘const struct Visitor’
vp.cc:30: error: forward declaration of ‘const struct Visitor’
vp.cc: In member function ‘virtual void Russia::accept(const Visitor*)’:
vp.cc:47: error: invalid use of incomplete type ‘const struct Visitor’
vp.cc:30: error: forward declaration of ‘const struct Visitor’

Ответы на вопрос(6)

Ваш ответ на вопрос