2012-02-09 70 views
0

我创建了访客使用的一个非常简单的例子。我有一个类Aerial,它有两个创建数组的方法methodA和methodB。但是,即使在我定义这些方法之前,编译器也会给出一些不合逻辑的错误:syntax error: identifier Aerial"Visitor::VisitA : function does not take 1 arguments"简单的访客模式故障

我已将定义和声明捆绑在一起,以使整个程序更简单。

#include <iostream> 
#include <conio.h> 

#define MAX_SIZE 100 

class Visitor 
{ 
public: 
    ~Visitor(){} 
    void visitA(Aerial*){}; 
    void visitB(Aerial*){}; 
protected: 
    Visitor(){} 
}; 

class Aerial 
{ 
private: 
    double height, radius; 
    double arr[MAX_SIZE]; 
protected: 
    Aerial(); 
public: 
    virtual ~Aerial(){}; 
    virtual void accept(Visitor&)=0; 
}; 

class AerialA:public Aerial 
{ 
public: 
    void accept(Visitor &v) 
    { 
     v.visitA(this); 
    } 
}; 

class AerialB:public Aerial 
{ 
public: 
    void accept(Visitor &v) 
    { 
     v.visitB(this); 
    } 
}; 

int main() 
{ 
    _getch(); 
    return 0; 
} 

回答

2

我想你需要使用前向声明。把

class Aerial; 

类别Visitor申报之前。

+0

是的工作,愚蠢的C++ :)谢谢! – Vidak 2012-02-09 17:55:54

1

你有你Visitor课前做的Aerial预先声明:

class Aerial; 

//rest of your code. 

这是因为你在你的Visitor类使用Aerial

+0

是啊,谢谢:) – Vidak 2012-02-09 17:57:20