0

I am not a c++ programmer as you will soon learn. I am on a personal project and it is my only choice. I just need to get past this, hopefully I learn something but I don't do it often enough.

I have two lines of inheritance:

Abstract Class Pane has a single virtual method with two subclasses{SmokePane, AttributePane}

and Class Finestra that is not virtual and has two subclasses {SmokeFinestra, ProbeFinestra}

Class Finestra uses class Pane and calls methods on it. The subclasses instantiate SmokePane and AttributePane to register as Pane instances for the base class Finestra to operate on.

In Pane.h

class Pane {
  public:
    Pane(uint x, uint y, uint w, uint h);
    ... 
    virtual void draw(ILI9341_t3* pDisplay) = 0;
};

In Pane.cpp

#include "Pane.h"

Pane::Pane(uint x,uint y, uint w, uint h){...}

In SmokePane.h and similar to AttributePane.h

#include "Pane.h"
class SmokePane : public Pane {
  public:
    SmokePane(uint x, uint y);
    void draw(ILI9341_t3* pDisplay);
};

In SmokePane.cpp and similar to AttributePane.h

#include "SmokePane.h"
SmokePane::SmokePane(uint x, uint y) : Pane(x,y, SP_WIDTH, SP_HEIGHT){...}
void SmokePane::draw(ILI9341_t3* pDisplay){...}

In Finestra.h

#include "Pane.h"
class Finestra {
  public:
    Finestra(uint width, uint height);
    void begin();
    bool add(Pane* pane);
    ...
};

In Finestra.cpp

#include "Finestra.h"
Finestra::Finestra(uint width, uint height){...}
void Finestra::begin(){...}
bool Finestra::add(Pane* pane){...}

In SmokeFinestra.h

#include "finestra.h"
class SmokeFinestra : public Finestra {
  public: 
    SmokeFinestra(uint width, uint height);
    ...
};

In SmokeFinestra.cpp

#include "SmokeFinestra.h"
#include "SmokePane.h"
#include "AttributePane.h"

SmokeFinestra::SmokeFinestra(uint width, uint height) : Finestra(width, height){}

void SmokeFinestra::begin(){
  Finestra::begin();

  SmokePane* smokePane = new SmokePane(0, 140);
  add(smokePane);

  AttributePane* attributePane = new AttributePane(0, 200);
  add(attributePane);
}

The error is:

In file included from SmokePane.h:1:0,
                 from SmokeFinestra.cpp:3:
Pane.h:4:7: error: redefinition of 'class Pane'
class Pane {
   ^
In file included from Finestra.h:4:0,
                 from SmokeFinestra.h:1,
                 from SmokeFinestra.cpp:1:
Pane.h:4:7: error: previous definition of 'class Pane'
 class Pane {

And the same for AttributePane

Any hints would be useful.

Nefarious
  • 388
  • 3
  • 15

0 Answers0