Тема: Класи + Одинарне успадкування
Підкажіть як пофіксити помилку(а саме в Rectangle* tri = new Rectangle(a);) та чомусь виводить не правильний розрахунок хоча формули првильні.
Код:
#include<iostream>
#include<windows.h>
#include<math.h>
using namespace std;
class Shape2D
{
public:
    Shape2D();
    virtual ~Shape2D();
    virtual float Area() = 0;
    virtual float Perimeter() = 0;
    virtual void PrintMessage();
};
Shape2D::Shape2D()
{
    cout << "Конструктор  2D Форма" << endl;
}
Shape2D::~Shape2D()
{
    cout << "Деструктор   2D Форма" << endl;
}
void Shape2D::PrintMessage()
{
    cout << " Це 2D Форма";
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Triangle : public Shape2D
{
private:
    float S,P,p,r1, r2,r3;
public:
    ~Triangle();
    Triangle(float = 0);
    float Perimeter();
    float Area();
    void PrintMessage();
};
Triangle::Triangle(float rs) : r1(rs) , r2(rs), r3(rs)
{}
Triangle::~Triangle()
{}
float Triangle::Perimeter()
{
    P = r1 + r2 + r3;
    return P;
}
float Triangle::Area()
{
    p = (r1 + r2 + r3)/2;
    S=sqrt(p * (p - r1) * (p - r2) * (p - r3));
    return S;
}
void Triangle::PrintMessage()
{
    cout << "Тип фігури - Трикутник" << endl;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Rectangle : public Shape2D
{
private:
    float P,S, s1,s2;
public:
    
    ~Rectangle();
    Rectangle(float = 0);
    float Perimeter();
    float Area();
    void PrintMessage();
};
Rectangle::Rectangle(float st) : s1(st),s2(st)
{}
Rectangle::~Rectangle()
{
    cout << "Прямокутник-деструктор " << endl;
}
float Rectangle::Perimeter()
{
    P = 2 * (s1 + s2);
    return P ;
}
float Rectangle::Area()
{
    S = s1 * s2;
    return S;
}
void Rectangle::PrintMessage()
{
    cout << "Тип фігури - Прямокутник";
}
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    float a;
    int i;
    while (1)
    {
        cout << endl << "Меню: " << endl
            << "1-Прямокутник" << endl
            << "2-Трикутник" << endl
            << "3-Вихiд:" << endl;
        cin >> i;
        switch (i)
        {
        case 1:
        {
                    cout << "Прямокутник:" << endl;
                    cout << "Введiть довжину ребра куба:" << endl;
                    cin >> a;
                    cin >> a;
                    cin >> a;
                    Rectangle* tri = new Rectangle(a);
                    cout << "Площа:" << tri->Area() << endl << "Периметер:" << tri->Perimeter() << endl;
                    tri->PrintMessage();
                    delete tri;
                    break;
        }
        case 2:
        {
            
            cout << "Трикутник:" << endl;
            cout << "Введiть сторони трикутника:" << endl;
            cin >> a;
            cin >> a;
            cin >> a;
            Triangle* rec = new Triangle(a);
            cout << endl << "Площа : " << rec->Area() << endl << "Периметер: " << rec->Perimeter() << endl;
            rec->PrintMessage();
            delete rec;
            break;
        }
        case 3:
            return 0;
        }
    }
    return 0;
}Компілятор видає помилку : E0020 індифікатор  "tri" не определен та
                                           E0079 Потрібний специфікатор типа (Rectangle(a);    )