C++ 在c+中实现访问者设计模式的错误+;

C++ 在c+中实现访问者设计模式的错误+;,c++,C++,基本上我有两个抽象类IVisitor和IVisitable,Product和Order正在扩展IVisitable,Report正在扩展IVisitor,因此Report可以访问订单和产品,并统计订单或产品的数量 我遇到了一些我无法解决的错误,比如“函数不带一个参数”,而显然带一个参数,未知标识符等等 代码如下: 宜居的 #pragma once #include"IVisitor.h" class IVisitable{ public: virtual void accept(IVi

基本上我有两个抽象类
IVisitor
IVisitable
Product
Order
正在扩展
IVisitable
,Report正在扩展
IVisitor
,因此
Report
可以访问
订单
产品
,并统计订单或产品的数量

我遇到了一些我无法解决的错误,比如“函数不带一个参数”,而显然带一个参数,未知标识符等等

代码如下:

宜居的

#pragma once
#include"IVisitor.h"

class IVisitable{
public:
    virtual void accept(IVisitor *v)=0;
};
IVisitor.h

#pragma once
#include"Product.h"
#include"Order.h"

class IVisitor{
public:
    virtual void visit(Order*)=0;
    virtual void visit(Product*)=0;
};
订单.h

#pragma once
#include<string>
using namespace std;
#include<vector>
#include"Product.h"


class Order : public IVisitable{
public:
    vector<Product> list;

    void accept(IVisitor *v){
        v->visit(this);

        for(int i=0; i<list.size(); i++)
            list[i].accept(v);

    }

};
Source.cpp

#include<iostream>
#include"Order.h"
#include"Report.h"

using namespace std;

void main(){
    Product p1("eggs");
    Product p2("meat");
    Product p3("milk");

    Order ord1; 
    ord1.list.push_back(p1); 
    ord1.list.push_back(p2);
    ord1.list.push_back(p3);

    Report *report = new Report;

    ord1.accept(report);

    cout<<report->numProduct<<endl;
}
#包括
#包括“Order.h”
#包括“Report.h”
使用名称空间std;
void main(){
产品p1(“鸡蛋”);
产品p2(“肉”);
产品p3(“牛奶”);
订单ord1;
ord1.列表。推回(p1);
ord1.列表。推回(p2);
ord1.列表。推回(p3);
报告*报告=新报告;
ord1.接受(报告);
coutivisitor.h(8):错误C2535:'void IVisitor::visit(void)':成员函数已定义或声明
1> h(7):见“ivisitor::访问”声明
1> product.h(13):错误C2660:“IVisitor::visit”:函数不接受1个参数
1> order.h(13):错误C2660:'IVisitor::visit':函数不接受1个参数

1> order.h(15):警告C4018:“头文件之间有一个引用循环。 要解决问题,请不要使用

#include "..."
但是使用

class XXX;

头文件之间有一个引用循环。 要解决问题,请不要使用

#include "..."
但是使用

class XXX;
尝试在#include和双引号
h
filename之间放置空格尝试在#include和双引号
h
filename之间放置空格
class XXX;