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;