error C2512: no appropriate default constructor av

2019-06-15 00:52发布

I am getting this annoying error and I don't know why =( ! This is the question , I solved it but I am having a problem with the constructor.

Write a program that defines a class called Circle that includes radius (type double) as data members. Provide a set and a get function for this data member. Ensure that the value entered by the user is valid and correct (greater than zero).
Include function members: a.function member that compute and return Diameter of the circle b.function member that compute and return Circumference of the circle c.function member that compute and return Area of the circle d.function member that Display all information of the circle e.constructor that initializes the data member. If the radius is not valid (i.e. less than zero) set it to zero.

the error I am facing :

error C2512: 'Circle' : no appropriate default constructor available

this is my code :

    #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;
        }

4条回答
神经病院院长
2楼-- · 2019-06-15 01:36

This line invokes a constructor with no arguments (known as default constructor):

Circle C;

The only constructor you have defined is:

Circle(double);

Hopefully this should point you in the right direction.

查看更多
不美不萌又怎样
3楼-- · 2019-06-15 01:42

Well, then add one :)

Circle() : radius(0.0) {}
查看更多
淡お忘
4楼-- · 2019-06-15 01:44

You should define a constructor with no parameters called default constructor. You can initialize related members to the default values.

Circle::Circle()
   {
   radius = 0.0
   }
查看更多
我只想做你的唯一
5楼-- · 2019-06-15 01:57

A default constructor is one without any parameters. Normally, it is provided for you. But if you explicitly define any other constructor, then it is not. So you have to define it yourself, or not use it. You are using it when you create an object in main, like this:

Circle C;

So, either define a default constructor, or don't use it.

查看更多
登录 后发表回答