C++继承与派生报错无法解决

可是我并没有缺少构造函数,不知道是否是继承时候出了问题,麻烦大家帮忙看看。
错误 C2512 “Rectangle”: 没有合适的默认构造函数可用

题目:
建立一个形状类Shape作为基类,派生出圆类Circle和矩形类Rectangle正方形Square类,求出面积,周长

#include<iostream>
#define pi 3.14
using namespace std;
class Shape
{
public:
    Shape();
    virtual double Area();
    virtual double Zhou();
    ~Shape();

};
class Circle :public Shape
{
private:
    float r;
public:
    Circle(float R)
    {
        r = R;
    }
    double Area() {
        return pi * r * r;
    }
    double Zhou() {
        return 2 * pi * r;
    }

};
class Rectangle:public Shape
{private:
    float length, width;
public:
    Rectangle(float len, float wid)
    {
        length = len, width = wid;
    }
    double Area()
    {
        return length * width;
    }
    double Zhou() {
        return 2 * (width + length);
    }

};
class Square :public Rectangle
{
private:
    float side;
public:
    Square(float Side)
    {
        side = Side;

    }
    double Area()
    {
        return side * side;
    }
    double Zhou()
    {
        return 4 * side;
    }
};
int main()
{
    char shape[9];
    cout << "Please input shape:" << endl;
    cin >> shape;
    if (shape == "circle")
    {
        float r;
        cout << "Please input r:" << endl;
        Circle c(r);
        c.Area();
        cout << "圆的面积为:" << c.Area() << endl;
        c.Zhou();
        cout << "圆的周长为:" << c.Zhou() << endl;

    }
    else if (shape == "rectangle")
    {
        float len, wid;
        cout << "Please input len,wid:" << endl;
        cin >> len;
        cin >> wid;
        Rectangle t(len, wid);
        t.Area();
        t.Zhou();
        cout << "矩形的面积为:" << t.Area() << endl;
        cout << "矩形的周长为:" << t.Zhou() << endl;

    }
    else if (shape == "square")
    {
        float side;
        cout << "Please input side:" << endl;
        cin >> side;
        Square s(side);
        s.Area();
        s.Zhou();
        cout << "正方形面积为:" << s.Area() << endl;
        cout << "正方形周长为:" << s.Zhou() << endl;
    }
}

#include<iostream>
#include<cstring>
#define pi 3.14
using namespace std;
class Shape
{
public:
    Shape() {}
    virtual double Area() = 0;
    virtual double Zhou() = 0;
    ~Shape() {}
 
};
class Circle :public Shape
{
private:
    float r;
public:
    Circle(float R)
    {
        r = R;
    }
    double Area() {
        return pi * r * r;
    }
    double Zhou() {
        return 2 * pi * r;
    }
 
};
class Rectangle:public Shape
{private:
    float length, width;
public:
    Rectangle(float len, float wid)
    {
        length = len, width = wid;
    }
    double Area()
    {
        return length * width;
    }
    double Zhou() {
        return 2 * (width + length);
    }
 
};
class Square :public Rectangle
{
private:
    float side;
public:
    Square(float Side) : Rectangle(Side, Side)
    {
        side = Side;
 
    }
    double Area()
    {
        return side * side;
    }
    double Zhou()
    {
        return 4 * side;
    }
};
int main()
{
    char shape[20];
    cout << "Please input shape:" << endl;
    cin >> shape;
    if (strcmp(shape, "circle") == 0)
    {
        float r;
        cout << "Please input r:" << endl;
        Circle c(r);
        cout << "圆的面积为:" << c.Area() << endl;
        cout << "圆的周长为:" << c.Zhou() << endl; 
    }
    else if (strcmp(shape, "rectangle") == 0)
    {
        float len, wid;
        cout << "Please input len,wid:" << endl;
        cin >> len;
        cin >> wid;
        Rectangle t(len, wid);
        cout << "矩形的面积为:" << t.Area() << endl;
        cout << "矩形的周长为:" << t.Zhou() << endl;
 
    }
    else if (strcmp(shape, "square") == 0)
    {
        float side;
        cout << "Please input side:" << endl;
        cin >> side;
        Square s(side);
        s.Area();
        s.Zhou();
        cout << "正方形面积为:" << s.Area() << endl;
        cout << "正方形周长为:" << s.Zhou() << endl;
    }
}