错误 C2228:'.visitFile'左侧必须具有类/结构/联合类型
Error C2228: left of '.visitFile' must have class/struct/union type
Visitor.h
class Visitor{
public:
virtual ~Visitor() {}
virtual void visitNode(Node*) = 0;
virtual void visitFile(File*) = 0;
virtual void visitDirectory(Directory*) = 0;
virtual void visitLink(Link*) = 0;
protected:
Visitor();
Visitor(const Visitor&);
};
//realize those visit function
void Visitor::visitNode(Node* n) {
//common default behavior
cerr << "It is not a directory! " << endl;
}
void Visitor::visitDirectory(Directory* d) {
Visitor::visitNode(d);
}
void Visitor::visitFile(File* f) {
Visitor::visitNode(f);
}
void Visitor::visitLink(Link* l) {
Visitor::visitNode(l);
}
文件.h
class File : public Node {
public:
File();
//redeclare common interface here
void setName(string& name);
string& getName();
void setCDate(char* cDate);
char* getCDate();
long size();
virtual void accept(Visitor*) = 0;
private:
string& name;
char* cDate;
};
//realize the function accept
void File::accept(Visitor* v) {
v.visitFile(this);
}
问题是函数accept(Visitor* v){}
,我的编译器总是告诉我:
d:win7 datadatacfilemanagefile.h(20) : error C2228: left of '.visitFile' must have class/struct/union type
我该如何处理?
v
是一个指针,应该调用operator->
并且应该*this
void File::accept(Visitor* v) {
v->visitFile(*this);
// ^^ ^
}
相关文章:
- 没有类型结构绑定不起作用?
- 如何使用指针连接两种不同的节点类型(结构)?
- 无法汇总初始化类型结构的变量,其中包含在类模板中的位字段成员
- 您如何声明类型结构的堆栈?在C 中
- 访问指向相同类型结构的指针
- 静态数据类型(结构)的组织
- 创建类型结构的指针阵列
- 处理类型结构数组
- 嵌入式 C++:在 C++ 中初始化易失性类型结构
- Mac OSX的c++中的变量类型结构(oaidl.h)
- 嵌套类型:结构与类
- 如何在 python 中实现 c++ 类型结构
- 如何使用类型结构定义双端队列(双面队列)
- 删除类型结构的元素形式向量
- 从类型结构的向量中删除元素
- 在c#、c++和java中创建python弱类型结构的强类型版本
- 从较大的数据类型(结构)转换为较小的数据类型
- 使用QGLShaderProgram从Qt传递自定义类型(结构体)统一到GLSL
- 如何:公开c++数据结构/类型(结构体,枚举)供c#使用
- 按值将类型结构传递给函数,错误:声明"average"中的两个或多个数据类型!!-