错误C2512:没有适当的默认构造函数可用

use*_*492 15 c++ constructor class

我收到这个恼人的错误,我不知道为什么=(!这是问题,我解决了它,但我遇到了构造函数的问题.

编写一个程序,定义一个名为Circle的类,其中包含radius(double类型)作为数据成员.为此数据成员提供set和get函数.确保用户输入的值有效且正确(大于零).
包括函数成员:a.计算和返回圆的直径的函数成员b.计算和返回圆周的函数成员c.计算和返回圆周面的函数成员d.显示所有信息的函数成员circle e.constructor初始化数据成员.如果半径无效(即小于零),则将其设置为零.

我面临的错误:

错误C2512:'Circle':没有合适的默认构造函数可用

这是我的代码:

    #include <iostream>

    using namespace std;

    class Circle
        {
            public:

            Circle(double);
            void setRadius(double);
            double getRadius();
            void Display();
            double Diameter(double);
            double Circumference(double);
            double Area(double);

            private:

            double radius;

        };

        Circle::Circle(double radio)
            {
                setRadius(radio);
            }

        void    Circle::setRadius(double ra)
            {
                if (ra < 0)
                {
                    radius = 0;
                }
                else
                    radius = ra;
            }

        double  Circle::getRadius()
            {

                double rado;

            cout << "Enter the Radius:\n";
            cin >> rado;
            setRadius(rado);

            return radius;
            }

        double  Circle::Diameter(double rad)
            {
                return 2*rad;
            }

        double  Circle::Area(double radi)
            {
                return 3.14 * radi * radi;
            }


        double  Circle::Circumference(double radiu)
            {
                return 2 * 3.14 * radiu;
            }

        void Circle::Display()
        {   
            cout << "The Radius of the circle is: \n";
            cout << radius;
            cout << "\nThe Diameter of the circle is: \n";
            cout << Diameter(radius);
            cout << "\nThe Circumference of the circle is: \n";
            cout << Circumference(radius);
            cout << "\nThe Area of the circle is: \n";
            cout << Area(radius);
            cout << endl;
        }

        int main()
        {
            Circle C;
            C.getRadius();
            C.Display();

            return 0;
        }
Run Code Online (Sandbox Code Playgroud)

hmj*_*mjd 15

该行调用不带参数的构造函数(称为默认构造函数):

Circle C;
Run Code Online (Sandbox Code Playgroud)

您定义的唯一构造函数是:

Circle(double);
Run Code Online (Sandbox Code Playgroud)

希望这应该指向正确的方向.


Ben*_*ley 5

默认构造函数是没有任何参数的构造函数.通常,它是为您提供的.但是,如果你明确定义任何其他构造函数,那么它不是.所以你必须自己定义,或不使用它.在main中创建对象时使用它,如下所示:

Circle C;
Run Code Online (Sandbox Code Playgroud)

因此,要么定义默认构造函数,要么不使用它.

  • @ user1092492但这是一个糟糕的解决方案.想一想:拥有一个没有半径的圆是否有意义?不.您的类不应该定义默认构造函数. (3认同)

mar*_*inj 4

好吧,那就加一个吧:)

Circle() : radius(0.0) {}
Run Code Online (Sandbox Code Playgroud)