2012-02-09 2 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

1

Вы должны сделать вышеописанную декларацию Aerial до вашего Visitor класса:

class Aerial; 

//rest of your code. 

это потому, что вы используете Aerial в вашем Visitor классе.

+0

да, спасибо :) – Vidak

Смежные вопросы