web-dev-qa-db-fra.com

erreur C2512: aucun constructeur par défaut approprié disponible

Je reçois cette erreur agaçante et je ne sais pas pourquoi = (! C'est la question, je l'ai résolue mais j'ai un problème avec le constructeur.

Ecrivez un programme qui définit une classe appelée Circle qui inclut radius (type double) en tant que données. Fournissez un ensemble et une fonction get Pour ce membre de données. Assurez-vous que la valeur entrée par l'utilisateur est valide et correcte (supérieure à zéro).
Inclure les membres de fonction: un membre de fonction qui calcule et renvoie Diamètre du membre de cercle b.fonction qui calcule et Renvoie la circonférence du membre de cercle c.fonction qui calcule et return Zone du membre d.function du cercle qui affiche toutes les informations du constructeur e du cercle qui initialise le membre des données. Si le rayon n'est pas valide (c'est-à-dire inférieur à zéro), réglez-le sur Zéro.

l'erreur à laquelle je suis confronté:

erreur C2512: 'Cercle': aucun constructeur par défaut approprié disponible

c'est mon 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;
        }
14
user1092492

Cette ligne appelle un constructeur sans argument (appelé constructeur par défaut):

Circle C;

Le seul constructeur que vous avez défini est:

Circle(double);

J'espère que cela devrait vous orienter dans la bonne direction.

15
hmjd

Un constructeur par défaut est un constructeur sans aucun paramètre. Normalement, il vous est fourni. Mais si vous définissez explicitement un autre constructeur, ce n'est pas le cas. Donc, vous devez le définir vous-même, ou ne pas l'utiliser. Vous l'utilisez quand vous créez un objet dans main, comme ceci:

Circle C;

Donc, définissez un constructeur par défaut ou ne l'utilisez pas.

5
Benjamin Lindley

Bien, alors ajoutez-en un :)

Circle() : radius(0.0) {}
3
marcinj

Vous devez définir un constructeur sans paramètre appelé constructeur par défaut. Vous pouvez initialiser les membres associés aux valeurs par défaut. 

Circle::Circle()
   {
   radius = 0.0
   }
0
Rabia