Okrągłe zależności deklaracji

Próbuję zaimplementować przykład wzorca odwiedzającego, ale mam problem z kolistymi zależnościami deklaracji klas. Kiedy przekazuję deklarację klasy Odwiedzający, klasy Rosja i Anglia nie wiedzą, że Visitor odwiedza metodę, ale kiedy przedłużyłem deklarację użytkownika do akceptowania metody, muszę użyć klas Anglia i Rosja, ale muszą wiedzieć, kto Odwiedzający jest, ponieważ używają tego typu w swoim kodzie. Próbowałem wielu wariantów zamawiania kodu, ale całkowicie się nie udało. Proszę, pomóż mi zrozumieć, co C ++ musi uzyskać. Dzięki.

#include <cstdio>
#include <vector>

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<Land> *l;
  public:
    explicit Trip(vector<Land> *_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<Land> 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;
}

I jest wyjście 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’

questionAnswers(6)

yourAnswerToTheQuestion