Per un test devo fare un programmino in C++ che vorrebbe simulare una libreria grafica (in realtà non fa nulla). Per farla breve, copiando un esempio (che so per certo dovrebbe funzionare) ho due classi: la superclasse
Forma (che appunto descrive una generica forma) e la sottoclasse
Cerchio.
La classe Forma ha un metodo (
refresh) che mi sta facendo dannare perché, una volta create forme diverse (nel mio caso sono solo cerchi ma in mezzo ci possono essere quadrati, triangoli... insomma, altre classi che implementerò), dovrebbe semplicemente richiamare a sua volta il metodo
disegna (attraverso chiamate polimorfiche) però continua ad uscirmi un errore del tipo
error: 'refresh' was not declared in this scope. Qualcuno può aiutarmi?
Forma.h
#ifndef FORMA_H
#define FORMA_H
#include <iostream>
using namespace std;
class Forma
{
static Forma *list;
Forma *next;
public:
Forma();
virtual ~Forma();
virtual void disegna()=0;
friend void refresh();
};
#endif
Forma.cpp
#include "Forma.h"
Forma * Forma::list=0;
Forma::Forma()
{
cout<<"Forma() ";
next=list;
list = this;
}
Forma::~Forma()
{
cout<<"~Forma()"<<endl;
}
void refresh()
{
for(Forma *p=Forma::list; p; p = p->next)
p->disegna();
}
Cerchio.h
#ifndef CERCHIO_H
#define CERCHIO_H
#include "Forma.h"
class Cerchio: public Forma
{
public:
Cerchio();
~Cerchio();
void disegna();
};
#endif
Cerchio.cpp
#include "Cerchio.h"
Cerchio::Cerchio()
{
cout<<"Cerchio"<<endl;
}
Cerchio::~Cerchio()
{
cout<<"Cerchio"<<endl;
}
void Cerchio::disegna()
{
cout<<"Cerchio"<<endl;
}
Main.cpp
#include "Cerchio.h"
#include "Forma.h"
#include <iostream>
using namespace std;
int main()
{
Cerchio c1();
Cerchio c2();
refresh();
return 0;
}