Mam taki fragment kodu:
FiguraPlaska.h
#include <iostream>
class FiguraPlaska
{
protected:
virtual void Wypisz(std::ostream& out) const = 0;
friend std::ostream& operator<<(std::ostream& os, const FiguraPlaska&
figura);
public:
virtual double Pole() = 0;
virtual double Obwod() = 0;
virtual ~FiguraPlaska();
};
FiguraPlaska.cpp
#include "FiguraPlaska.h"
std::ostream& operator<<(std::ostream& os, const FiguraPlaska& figura)
{
figura.Wypisz(os);
return os;
}
FiguraPlaska::~FiguraPlaska()
{
}
Prostakat.h
#include "FiguraPlaska.h"
class Prostokat : public FiguraPlaska
{
private:
double a, b;
protected:
void Wypisz(std::ostream& out) const override;
public:
Prostokat(double a, double b);
double GetA() const;
void SetA(double a);
double GetB() const;
void SetB(double b);
double Obwod() override;
double Pole() override;
~Prostokat() override;
};
Prostakat.cpp
#include "Prostokat.h"
#include <iostream>
using namespace std;
Prostokat::Prostokat(double a, double b) : a(a), b(b)
{
cout << "Konstruktor Prostokąta(" << a << "," << b << ")" << endl;
}
double Prostokat::GetA() const
{
return a;
}
double Prostokat::GetB() const
{
return b;
}
void Prostokat::SetA(double a)
{
this->a = a;
}
void Prostokat::SetB(double b)
{
this->b = b;
}
double Prostokat::Obwod()
{
return 2 * a + 2 * b;
}
double Prostokat::Pole()
{
return a * b;
}
void Prostokat::Wypisz(std::ostream& out) const
{
cout << "Prostokat o bokach a=" << a << " i b=" << b << endl;
}
Prostokat::~Prostokat()
{
//todo
}
main.cpp:
#include <iostream>
#include "Prostokat.h"
int main()
{
Prostokat myProstakat(4, 7);
std::cout << "Hello World!\n";
}
Przy próbie kompilacji pojawia się błąd:
'FiguraPlaska': 'class' type redefinition
'FiguraPlaska': base class undefined
'Prostokat::Wypisz': method with override specifier 'override' did not override any base class methods
'Prostokat::Obwod': method with override specifier 'override' did not override any base class methods
'Prostokat::Pole': method with override specifier 'override' did not override any base class methods
'Prostokat::~Prostokat': method with override specifier 'override' did not override any base class methods
Dlaczego powyższe błędy się pojawiają?