gpt4 book ai didi

c++ - 声明的循环依赖

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:18 24 4
gpt4 key购买 nike

我正在尝试实现访问者模式的示例,但我在类声明的循环依赖方面遇到了麻烦。当我做访问者类的前向声明时,俄罗斯和英格兰类不知道访问者有访问方法,但是当我扩展访问者的方法接受的前向声明时,我需要使用英格兰和俄罗斯类,但他们需要知道谁访问者是,因为他们在代码中使用了这种类型。我尝试了多种排序代码的变体,但我完全失败了。请帮我理解,C++ 需要什么才能得到这个。谢谢。

#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;}

还有g++输出

c++ -ansi -Wall -Wextra -Wconversion -pedantic -Wno-unused-parameter  -o vp vp.ccvp.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’

最佳答案

class Visitor; 

class England : public Land {
public:
void accept(const Visitor *v); // Only declaration
};


// Define Visitor
class Visitor {
//...
};

// Now implementation
void England::accept(const Visitor *v) {
v->visit(this);
}

关于c++ - 声明的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1748624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com