2012-02-09 19 views
0

私は非常に簡単なビジター用の例を作成しています。私はクラスAerialを持っています。これは、配列methodAとmethodBを作成する2つのメソッドを持っています。しかし、私がそれらのメソッドを定義する前に、コンパイラはいくつかの非論理的なエラー、すなわち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

1

あなたVisitorクラスの前Aerialの前方宣言をしなければならない。

class Aerial; 

//rest of your code. 

これ、あなたのVisitorクラスでAerialを使用しているので。

+0

ええ、ありがとう:) – Vidak

関連する問題